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,请注意是否符合更改后数据库的语法和要求。