客户用的数据库是mysql,而研发好的产品支持oracle,为了让客户掏腰包,咱们必需把数据库环境从oracle转向mysql。咱们在转换的流程中碰到了下面一些疑问,期盼能给一样遭遇的同仁们一些模仿。假设咱们在开始的设计、编码流程中留意数据库的移植性,这种情况下能够完全不须要作额定任务。
一、数据库环境从oracle转向mysql碰到的疑问
由于逻辑不变,所以准绳是不改运用顺序代码,只改数据库表的树立/原始化sql。下面是咱们碰到
1、 大小写敏感的区别(假设服务器OS是linux)。
在oracle中普通情况下不区分大小写。有时分咱们在运用oracle不留意大小写的疑问,表名和字段名不加双引号是不区分大小写的,像这样:insert into tableName 和 insert into TABLENAME成效是一样的,用工具导出树立/数据原始化脚本,得到的结果普通表名和字段名转化成了大写。
但在MySQL中,所运用操作系统的大小写敏理性决议了数据库名和表名的大小写敏理性。数据库对应数据目录中的目录,数据库中的每个表至少对应数据库目录中的一个文件(也能够是多个,取决于存储引擎)。因而,运用数据库或表理论上是操纵这些文件(夹),所以运用操作系统的大小写敏理性决议了数据库名和表名的大小写敏理性。在以linux为内核的操作系统中是大小写敏感的。
处理的方法是把mysql的数据库名和oracle的大小写坚持一致,表名与运用顺序中sql字符串中的表名坚持一致,假设运用顺序中字段名用了双引号,那请把sql中的字段名大小写与双引号里的字符坚持一致。假设你的运用顺序所援用的表名、字段没有一致大小写,那费事就大了。
2、保管字的区别。
像sql言语的函数名(如:int,show)等是保管字。Oracle中保管字是能够作为表名和字段名,并且不影响运用,但mysql中保管字是不能作为表名和字段名,假设运用会报语法错误。
处理方法,把sql语句中的保管字用‘`’符号惹起来,这个符号位于键盘的tab键上面;假设是字段名尚有另外一种方法tablename.字段名。像这样:insert into tablename (id, `interval`) value(….. 或insert into tablename (id, tablename.int) value(….. 。
3、数据类型的区别。
在mysql中没有像oracle中的varchar2、number,mysql有与之对应的varchar、numeric,当然在oracle中没有mysql的time类型。
处理方法是替换。
4、自动增长类型的区别。
Oracle有sequence,mysql中没有,但有auto_increment属性。
处理方法是把Oracle中sequence转换成运用auto_increment属性,某些情况能够尚有一种方法能够处理疑问,新建一个独立的表用来专门记载自动增长型的数据。