"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

移植oracle到mysql_oracle移植到mysql注意事项(转载)相关推荐

  1. oracle整库的移植,Oracle数据库整机移植技术(原创)

    Oracle数据库整机移植技术 本文源自一次做Oracle9i DataGuard测试而产生的思路.前些时间有网友提出因为OS损坏,在硬盘没有损坏的情况下可否将数据库恢复至另一台机器上.现在不管从理论 ...

  2. swisssql-sql server to oracle,Sql Server移植到Oracle之Migration Workbench

    移植SQL server数据库对象到Oracle的操作说明 移植之平台和相关工具 OS:Windows Vista DBMS:Sql Server 2005 Plus Oracle 10g for V ...

  3. oracle10g数据库复制,windows 下oracle 10G 数据库移植到 linux平台 (通过文件直接复制方法)...

    windows 下oracle 10G  数据库移植到 linux平台 (通过文件直接复制方法) 最近学习了一下oracle数据库启动原理,于是,就把在windows创建起来做测试的数据库 移植到li ...

  4. java access转mysql_移植实务:从Access到MySQL

    很多MySQL用户都有过将Access移植到MySQL的计划,不过这个移植过程性能和实践的相关描述资料很少.本文将为大家总结将Access应用程序成功移植到MySQL的要点和注意事项. 由于Acces ...

  5. oracle抽取mysql_oracle到mysql,oracle到oraclel的多表批量数据迁移,定期任务抽取数据-kettle的使用...

    一.背景 上一篇文章(单表数据迁移)用kettle实现了一张表的数据迁移.但实际情况中,数据库会有几百,几千张表,而kettle的表输入和表输出只能选择一张表,我们不可能一个个地填写表名.这时候,我们 ...

  6. TI Davinci DM6441嵌入式Linux移植攻略——UBL移植篇

    目录(?)[+] 一DM6441的Boot过程简介 二DM6441的UBL移植 CCS文件夹 Common文件夹 GNU文件夹 移植DDR2 移植Nand Flash 其它 声明:本文参考网友zjb_ ...

  7. mysql命令行导入dmp文件,oracle的备份文件(dmp)导入mysql数据库方法

    搜索热词 这个过程分为两步,当然了,如果你本身有安装oracle数据库,那就不要看这个文章了,如果你不想为了一个几十M的dmp文件去安装一个oracle那你可以参考本文章的方法. 第一步:把dmp文件 ...

  8. ZYNQ Linux 移植:包含petalinux移植和手动移植debian9

    问题: 1.ZYNQ Linux启动流程: BOOTROM→FSBL→Uboot→Kernel→RootFS 环境: 虚拟机ubuntu16.04 petalinux2018.3 vivado2018 ...

  9. oracle变mysql,Oracle变换成为Mysql注意事项

    做项目的时候发现当要将Oracle数据库转换为Mysql需要将SQL语句中二者不兼容的方面需要修改 下面列出自己总结的注意事项: 1.日期格式的转换: Oracle Mysql 注意事项 to_cha ...

最新文章

  1. php多个域名301重定向到主域名代码,Nginx 301和apache重定向域名规则方法(多个域名,单个域名)...
  2. 网络推广下叮咚买菜已完成D轮融资,生鲜电商下一次融资又在何方?
  3. phpstorm 控制台运行
  4. MariaDB [Warning] Could not increase number of max_open_files to more than 1024
  5. 【可运行,刘汝佳代码】Trees on the level UVA - 122
  6. rog live service是什么_双11手机怎么买?ROG游戏手机3“独一份”体验,值得剁手...
  7. 连接硬盘计算机没显示,新买的移动硬盘在我的电脑中无法显示,但是右下角图标显示已经连接,? 爱问知识人...
  8. flowable 和 activty工作流 使用视图方案解决系统内部用户、组、用户和组关联
  9. 你还在用命令看日志?用这款可视化工具简直太方便了!
  10. HDU 2602 Bone Collector 0/1背包
  11. Qt容器类之三:通用算法
  12. Vue.js常用开发知识简要入门(二)
  13. c语言伪代码写for循环,伪代码撰写规范
  14. C-Free简单介绍
  15. zzuli:1047对数表
  16. Unity 正则表达式
  17. 数据库安全性和完整性考虑_您是否考虑过云安全性?
  18. 《MySQL实战45讲》——学习笔记31 “误删数据的解决方案(删行/删表/删库/删实例)“
  19. Python操作word基础
  20. linux环境下随时照看服务器进程的ps和top命令

热门文章

  1. C#中BackgroundImage与Image的区别
  2. 配置MSTP功能示例
  3. 抖音现在做的竞价推广都是怎么操作的?
  4. RFID与物联网的关系
  5. IOS开发之免费证书+不越狱真机调试
  6. PS进阶篇——如何PS软件钢笔工具抠图(三)
  7. 解决win10卡顿现象
  8. vcs 覆盖率收集2——覆盖率选项 + 合并覆盖率
  9. 触发onclick事件元素的获取
  10. 云服务器部署ssl证书