ITPub博客

首页 > 数据库 > Oracle > 杭州达内:oracle移植到mysql注意事项

杭州达内:oracle移植到mysql注意事项

Oracle 作者:ourdsky 时间:2013-12-07 22:29:42 0 删除 编辑

客户用的数据库是mysql,而研收好的产品支撑oracle,我们必须把数据库环境从oracle转背mysql。我们在转换的过程中碰着了上面一些成绩,盼看能给一样遭受的同仁们一些戒备。假设我们在最初的设计、编码过程中留意数据库的移植性,那种环境下可以完整没有必要做迥殊工做。

1、数据库环境从oracle转背mysql碰着的成绩。

因为逻辑没有变,所以本则是没有改运用法度代码,只改数据库表的创建/初始化sql。上面是我们碰着的成绩以及操持办法。

1.巨细写敏感的区分(假设服务器OS是linux)。

在oracle中一样泛泛环境下没有区分巨细写。有时刻我们在运用oracle没有留意巨细写的成绩,表名战字段名没有减双引号是没有区分巨细写的,像那样:insert into tableName 战 insert into TABLENAME成果是一样的,用对象导出创建/数据初始化脚本,得到的功能一样泛泛表名战字段名转化成了大年夜写。

但在MySQL中,所运用操做体系的巨细写敏感性决议了数据库名战表名的巨细写敏感性。数据库对应数据目录中的目录,数据库中的每个表最少对应数据库目录中的一个文件(也概略是多个,与决于存储引擎)。因此,运用数据库或表真际上是操做那些文件(夹),所以运用操做体系的巨细写敏感性决议了数据库名战表名的巨细写敏感性。在以linux为内核的操做体系中是巨细写敏感的。

操持的办法是把mysql的数据库名战oracle的巨细写保持同等,表名与运用法度中sql字符串中的表名保持同等,假设运用法度中字段名用了双引号,那请把sql中的字段名巨细写与双引号里的字符保持同等。假设你的运用法度所援引的表名、字段没有同一巨细写,那贫寒便大年夜了。

2.保存字的区分。

像sql语止的函数名(如:inteval,show)等是保存字。Oracle中保存字是可以做为表名战字段名,而且没有影响运用,但mysql中保存字是没有能做为表名战字段名,假设运用会报语法破绽。

操持办法,把sql语句中的保存字用‘`’符号引起来,阿谁符号位于键盘的tab键上面;假设是字段名还有此外一种圆法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属性,某些环境概略还有一种办法可以操持成绩,新建一个自力的表用来专门记载主动删减型的数据。

5.索引长度限制的区分。

从MySQL 4.1.2最早,MyISAM战InnoDB表索引长度支撑1000字节,也就是说索引字段的长度没有能超越1000字节,假设超越会报那样的错:ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes。假设是UTF-8编码,相当于333个字符的长度(因为UTF8一个字符占3个字节)。Oracle的索引长度限制比mysql要宽紧很多。

操持的办法便没有须要多说了,要么改索引的定义,要么改字段的定义长度。

2、为了数据库的兼容性我们该当留意些甚么。

数据库的兼容性该当是数据库设计该当正视的一个成绩,因为有时刻客户存在已在用的数据库,而且没有盼看同时庇护两个数据库,那样的话兼容多种数据库还能成为产品的一个卖点。

做到数据库的兼容性关头是遵守标准用法。

1.遵守标准用法,尽管没有运用某种数据库特有的用法。

如msyql的‘`’符号的用法,

再好比,很多人有那种用法,在运用oracle开收的时刻创建sequence,往表中插数据之前先SELECT seq.nextval FROM DUAL;,然后把查询得到的值做为value插进表中,那种用法没法适应没有sequence的数据库,每个数据库都有主动删减型的用法,假设必要运用便该当完整天运用。

再举个例子,没有同的数据库对分页查询做了扩大,postgresql有offset,limit,oracle便没有。

2.躲免数据库巨细写敏感的成绩。

选择数据库表名战字段名采取大年夜写仍是小写,而且在数据库的设计战编码过程中完整同一。

3.保存字。

要求数据库设计者尽管没有运用保存字做表名战字段名。也有很多人有那种用法,在表名战字段名前减‘_’,像那样:create table _tablename ( _id integer)。那样永久没有会呈现保存字引起的成绩。


<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21183743/viewspace-1117078/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-03-22