移植oracle到mysql_oracle移植到mysql注意事项(转载)

"a4i zrE5~x4Iz.f0客户用的数据库是mysql,而研发好的产品支持oracle,我们必须把数据库环境从oracle转向mysql。我们在转换的过程

中碰到了下面一些问题,希望能给同样遭遇的同仁们一些借鉴。如果我们在最初的设计、编码过程中注意数据库的移植性,这种情况下可以完全不需要作额外工作。UX%k.W%`h2] y051Testing软件测试网(OM_

Wd*I

AoTw

一、数据库环境从oracle转向mysql碰到的问题。qP g8T4p051Testing软件测试网q#g

Gd!s(|W0p

因为逻辑不变,所以原则是不改应用程序代码,只改数据库表的创建/初始化sql。下面是我们碰到的问题以及解决办法。8F#eg&?jt5P#n051Testing软件测试网(k8x;ffw`:opOcr;W

1.大小写敏感的区别(如果服务器OS是linux)。b#ch4b-LBZb0

-G#bI(cP0在oracle中一般情况下不区分大小写。有时候我们在使用oracle不注意大小写的问题,表名和字段名不加双引号是不区分大小写的,像这

样:insert into tableName 和 insert into

TABLENAME效果是一样的,用工具导出创建/数据初始化脚本,得到的结果一般表名和字段名转化成了大写。51Testing软件测试网z8fA:O-l(UR#J~Lm

)Gx

Cn#u0EhV9l[Q0但在MySQL中,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。数据库对应数据目录中的目录,数据库中的每个表至少对应数据

库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,使用数据库或表实际上是操纵这些文件(夹),所以使用操作系统的大小写敏感性决定了数据库名

和表名的大小写敏感性。在以linux为内核的操作系统中是大小写敏感的。MR;NlV4T0

X2c_Ou$i^7?*B0解决的办法是把mysql的数据库名和oracle的大小写保持一致,表名与应用程序中sql字符串中的表名保持一致,如果应用程序中字段名用了双

引号,那请把sql中的字段名大小写与双引号里的字符保持一致。如果你的应用程序所引用的表名、字段没有统一大小写,那麻烦就大了。(x8Crp |4AR{0

.x%i8i

Jq$R02.保留字的区别。51Testing软件测试网h.og$dm-?(z51Testing软件测试网qd}y/SA8iUB

像sql语言的函数名(如:inteval,show)等是保留字。Oracle中保留字是可以作为表名和字段名,并且不影响使用,但mysql中保留字是不能作为表名和字段名,如果使用会报语法错误。8JlRJj4w051Testing软件测试网x a$s,dV|fz

解决办法,把sql语句中的保留字用‘`’符号引起来,这个符号位于键盘的tab键上面;如果是字段名还有另外一种方法tablename.字段

名。像这样:insert into tablename (id, `interval`) value(….. 或insert into

tablename (id, tablename.inteval) value(….. 。,e;d}$cGT:Xrl051Testing软件测试网Dvb4~c(aV

3.数据类型的区别。51Testing软件测试网Ig'o5W;\51Testing软件测试网Ef!NFH3wJ%}^0c.e

在mysql中没有像oracle中的varchar2、number,mysql有与之对应的varchar、numeric,当然在oracle中没有mysql的time类型。51Testing软件测试网wzuRx/_

Q9J(RBhT0解决办法是替换。-|z7W'x|!egr0

r-W+I2EP04.自动增长类型的区别。51Testing软件测试网6]Hg Ng3`"\C3E51Testing软件测试网~&fIU'FXe({T

Oracle有sequence,mysql中没有,但有auto_increment属性。51Testing软件测试网[G+S^CgH51Testing软件测试网{!vA:AE#t2A1q

解决办法是把Oracle中sequence转换成使用auto_increment属性,某些情况可能还有一种办法可以解决问题,新建一个独立的表用来专门记录自动增长型的数据。51Testing软件测试网%pzI&NA'P$^$t:v.J

-lblTc*K,{05.索引长度限制的区别。#O2y:neiOb6EG,a"t0

+z,X"mq1O8Qc.tw0从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要宽松得多。51Testing软件测试网(f/bgcE

l9\$z

;Yp%u*QE6u$yi.GD0解决的办法就不必要多说了,要么改索引的定义,要么改字段的定义长度。51Testing软件测试网-O7^]bd1p

Q`

w7RbY_*Bv5{H0二、为了数据库的兼容性我们应该注意些什么。v;`m)m5_9T0

e?dW4GkD PVs0数据库的兼容性应该是数据库设计应该重视的一个问题,因为有时候客户存在已经在用的数据库,并且不希望同时维护两个数据库,这样的话兼容多种数据库还能成为产品的一个卖点。izB4uI7_ ck051Testing软件测试网3u

l/p RKlC`QSv'h

作到数据库的兼容性关键是遵守标准用法。51Testing软件测试网_3r;Bn*[

S

5qm&u%SU0y~4U01.遵守标准用法,尽量不使用某种数据库特有的用法。3U;Z/EC6tN/M A4Z051Testing软件测试网,e*n,ur?W(yP?;p

如msyql的‘`’符号的用法,1dHs,~`P1N8vS;`0

[[Ot5Wn X{0再比如,很多人有这种用法,在使用oracle开发的时候创建sequence,往表中插数据之前先SELECT seq.nextval

FROM

DUAL;,然后把查询得到的值作为value插入表中,这种用法没法适应没有sequence的数据库,每个数据库都有自动增长型的用法,如果需要使用

就应该完全地使用。51Testing软件测试网%Y(z]mvF

fM9L8`we]U0再举个例子,不同的数据库对分页查询作了扩展,postgresql有offset,limit,oracle就没有。51Testing软件测试网0t-p1|EXT(A'iVI51Testing软件测试网2?p1im{hk9w*Z4g

2.避免数据库大小写敏感的问题。51Testing软件测试网iY:w&xIl8iYz

_4[51Testing软件测试网T7GUw!T1C"KG

选择数据库表名和字段名采用大写还是小写,并且在数据库的设计和编码过程中完全统一。j]XVP0oQ\0

HIz!u6Z._03.保留字。51Testing软件测试网1j QPN|PHO51Testing软件测试网1c"KN7R%c&Y

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值