数据库相关

数据平台从mysql移植到oracle遇到的问题总结

Threads [ Zurück | Weiter ]

1,关键字长度

Oracle中,表名、字段名、索引名、外键名等全部限制在30个字符以内,切勿超过这个限制;

2,关键字

Mysql中某些名称可以作为字段名,或者加上“·”符号强制作为字段名。虽然oracle也可以加“””强制关键字作为字段名,但是Hibernate在翻译的时候不会加双引号限制,错误会在hibernate中抛出,故字段名请尽量避免使用简单常用单词,IM系统中遇到的关键字有:user, level, row, online, size, type。

3,类型转换

Mysql与oracle中数据类型有许多不同,大致需要注意的包括以下:
------------------------------------------------------------------------------------------------------
   mysql                                                     oracle
------------------------------------------------------------------------------------------------------
  varchar                                                          varchar2

整数bit(x),int(x),bigint(x)   number(x)
限位浮点数float(x,y)                         number(x,y)

浮点数float                                        number

长文本 text                                                     varchar2(2000)/varchar2(4000)/clob

二进制类型                                                    blob

-------------------------------------------------------------------------------------------------------

非主键的“not null”全部不要,外键必须在表的值插入以后定义;

4,布尔值

Oracle中没有布尔值这一说,对于mysql中的bit(1),mysql可以当做布尔值处理,而作为“number(1)”处理的oracle到目前为止没有找到直接证据其能执行布尔类型。

5,每次插入只允许插入一行

Mysql当中的语法 “insert into table1(field1, field2…) values(val_1_1, val_1_2,…),(val_2_1,val_2_2,…),…”即多行插入的语法在oracle中不再有效,多行插入必须一个“insert”语法插入一行数据。

6,date/datetime类型不再使用--还得再商榷(20170207注)

Mysql中的date/datetime类型可以插入字符串格式的时间,并且能够很好处理时间,但是oracle与之很难兼容,华为系统中已经没有date这样的类型了,全部作为字符串或者长整形处理;[JX1] 

7,自增及自增的处理

Mysql中可以将字段设置为 AUTO_INCREMENT表示该字段是自增的,但是Oracle没有这种定义,必须自己定义序列(sequence)和触发器(trigger)。好在Hibernate能够处理这个问题,只要正确配置,hibernate会用其自身的序列解决自增的问题,但是问题的关键就在这里:有些表的插如用的是原生的sql,并且没有插入本来可以自增的主键,这样就会导致这段sql在Oracle中执行失败,甚至有的表既有hibernate的保存方式,又有原生sql的插入,导致后期改造处理非常麻烦!

以上就是mysql改造成oracle平台时遇到的问题的简短小结,希望各位同事以后能稍加注意。

同时还得查看代码中的问题,如果代码中有大量的原生sql或者使用的orm平台都大量原生SQL,请注意是否符合更改后数据库的语法和要求。


 [JX1]这点看情况处理

0 (0 Stimmen)