oracle移植到mysql留意事项
核心提示:客户用的数据库是mysql,而研发好的产品支持oracle,为了让客户掏腰包,我们必须把数据库环境从oracle转向mysql。我们在转换的进程中碰到了下面1些题目,希看能给一样遭受的同仁们1些鉴戒。假设我们在最初的设计、编码进程中留意数据库的移植性,这类情况下可以完全不
客户用的数据库是mysql,而研发好的产品支持oracle,为了让客户掏腰包,我们必须把数据库环境从oracle转向mysql。我们在转换的进程中碰到了下面1些题目,希看能给一样遭受的同仁们1些鉴戒。假设我们在最初的设计、编码进程中留意数据库的移植性,这类情况下可以完全不需要作额外工作。
1、数据库环境从oracle转向mysql碰到的题目。
由于逻辑不变,所以原则是不改利用程序代码,只改数据库表的创建/初始化sql。下面是我们碰到的题目和解决办法。
1、 大小写敏感的辨别(假设服务器OS是linux)。
在oracle中1般情况下不辨别大小写。有时候我们在使用oracle不留意大小写的题目,表名和字段名不加双引号是不辨别大小写的,像这样:insert into tableName 和 insert into TABLENAME效果是1样的,用工具导出创建/数据初始化脚本,得到的结果1般表名和字段名转化成了大写。
但在MySQL中,所使用操纵系统的大小写敏感性决定了数据库名和表名的大小写敏感性。数据库对应数据目录中的目录,数据库中的每个表最少对应数据库目录中的1个文件(也多是多个,取决于存储引擎)。因此,使用数据库或表实际上是操纵这些文件(夹),所以使用操纵系统的大小写敏感性决定了数据库名和表名的大小写敏感性。在以linux为内核的操纵系统中是大小写敏感的。
解决的办法是把mysql的数据库名和oracle的大小写保持1致,表名与利用程序中sql字符串中的表名保持1致,假设利用程序中字段名用了双引号,那请把sql中的字段名大小写与双引号里的字符保持1致。假设你的利用程序所援用的表名、字段没有同1大小写,那麻烦就大了。
2、保存字的辨别。
像sql语言的函数名(如:inteval,show)等是保存字。Oracle中保存字是可以作为表名和字段名,并且不影响使用,但mysql中保存字是不能作为表名和字段名,假设使用会报语法毛病。
解决办法,把sql语句中的保存字用‘`’符号引发来,这个符号位于键盘的tab键上面; 假设是字段名还有另外1种方法tablename.字段名。像这样:insert into tablename (id, `interval`) value(….. 或insert into tablename (id, tablename.inteval) value(….. 。
3、数据类型的辨别。
在mysql中没有像oracle中的varchar2、number,mysql有与之对应的varchar、numeric,固然在oracle中没有mysql的time类型。
解决办法是替换。
4、自动增长类型的辨别。
Oracle有sequence,mysql中没有,但有auto_increment属性。
解决办法是把Oracle中sequence转换成使用auto_increment属性,某些情况可能还有1种办法可以解决题目,新建1个独立的表用来专门记录自动增长型的数据。
5、索引长度限制的辨别。
从MySQL 4.1.2开始,MyISAM和InnoDB表索引长度支持1000字节,也就是说索引字段的长度不能超过1000字节,假设超过会报这样的错:ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes。假设是UTF⑻编码,相当于333个字符的长度(由于UTF81个字符占3个字节)。Oracle的索引长度限制比mysql要宽松很多。
解决的办法就没必要要多说了,要末改索引的定义,要末改字段的定义长度。
2、为了数据库的兼容性我们应当留意些甚么。
数据库的兼容性应当是数据库设计应当重视的1个题目,由于有时候客户存在已在用的数据库,并且不希看同时保护两个数据库,这样的话兼容多种数据库还能成为产品的1个卖点。
作到数据库的兼容性关键是遵照标准用法。
1、 遵照标准用法,尽可能不使用某种数据库独有的用法。
如msyql的‘`’符号的用法,
再比如,很多人有这类用法,在使用oracle开发的时候创建sequence,往表中插数据之前先SELECT seq.nextval FROM DUAL; ,然后把查询得到的值作为value插进表中,这类用法没法适应没有sequence的数据库,每个数据库都有自动增长型的用法,假设需要使用就应当完全地使用。
再举个例子,不同的数据库对分页查询作了扩大,postgresql有offset,limit,oracle就没有。
2、 避免数据库大小写敏感的题目。
选择数据库表名和字段名采取大写还是小写,并且在数据库的设计和编码进程中完全同1。
3、 保存字。
要求数据库设计者尽可能不使用保存字作表名和字段名。也有很多人有这类用法,在表名和字段名前加‘_’,像这样:create table _tablename ( _id integer)。这样永久不会出现保存字引发的题目。
http://www.fw8.net/TAG:数据库,题目,大小写,长度,敏感性
评论加载中...
|