客户用的数据库是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语言的函数名(如: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要宽松得多。

解决的办法就不必要多说了,要么改索引的定义,要么改字段的定义长度。

二、为了数据库的兼容性我们应该注意些什么。

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

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

1、 遵守标准用法,尽量不使用某种数据库特有的用法。

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

再比如,很多人有这种用法,在使用Oracle开发的时候创建sequence,往表中插数据之前先SELECT seq.nextval FROM DUAL;,然后把查询得到的值作为value插入表中,这种用法没法适应没有sequence的数据库,每个数据库都有自动增长型的用法,如果需要使用就应该完全地使用。

再举个例子,不同的数据库对分页查询作了扩展,postgresql有offset,limit,Oracle就没有。

2、 避免数据库大小写敏感的问题。

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

3、 保留字。

要求数据库设计者尽量不使用保留字作表名和字段名。也有很多人有这种用法,在表名和字段名前加‘_’,像这样:create table _tablename ( _id integer)。这样永远不会出现保留字引起的问题。客户用的数据库是mysql,而研发好的产品支持oracle,为了让客户掏腰包,我们必须把数据库环境从Oracle转向Mysql。我们在转换的过程中碰到了下面一些问题,希望能给同样遭遇的同仁们一些借鉴。如果我们在最初的设计、编码过程中注意数据库的移植性,这种情况下可以完全不需要作额外工作。

oracle mysql认证考试流程_Oacle认证考试:Oracle移植到MySQL注意事项相关推荐

  1. oracle mysql认证考试流程_oraclemysql认证考试的流程有些什么

    打开报名网站:https://www.pearsonvue.com.cn/ 选择考生主页 输入关键字"Oracle"进行搜索,然后出现如下结果 在右侧点击登录,登录界面如下. 登录 ...

  2. bde oracle 商友的流程_bde oracle 商友的流程_BDE动态连接Oracle数据库

    BDE动态连接Oracle数据库 说明:系统是三层架构:数据库是Oracle9, Server采用BDE连接数据库,使用scktsrvr.exe,Client采用SocketConnection连接到 ...

  3. bde oracle 商友的流程_BDE动态连接Oracle数据库

    BDE动态连接Oracle数据库 说明:系统是三层架构:数据库是Oracle9, Server采用BDE连接数据库,使用scktsrvr.exe,Client采用SocketConnection连接到 ...

  4. 阿里云认证有什么用?考试费用高不高?

    现在很多人都想找一个稳定的工作,最好是薪资也高.待遇也好,还比较轻松的活,这其实是比较难的,但是找一个忙碌但挣钱的工作还是可以的,尤其是对于IT行业来说,高薪往往代表着忙碌.对于很多从事IT行业的人来 ...

  5. 2010年剑桥商务英语(BEC)考试流程

    2010年剑桥商务英语(BEC)考试流程 :BEC考试分初(BEC1).中(BEC2).高(BEC3)三个级别.这三个考试是针对英语为非母语国家的需求而设计的主要在经济迅速发展.国际交流日益增多的国家 ...

  6. BRC认证辅导,BRC认证准备文件时有哪些要求

    一.BRC食品安全全球标准认证各类标准介绍: 1.<食品安全全球标准>*八版(以下简称<标准>).自较初于 1998 年**并颁布以来,本<标准>一直定期进行*新, ...

  7. oracle mysql认证考试流程_报考oraclemysql认证考试的流程是什么

    打开报名网站:https://www.pearsonvue.com.cn/ 选择考生主页 输入关键字"Oracle"进行搜索,然后出现如下结果 在右侧点击登录,登录界面如下. 登录 ...

  8. 最新Oracle 11g OCA/OCP/OCM 认证考试体系和认证途径

    Oracle(甲骨文)数据库认证考试流程:OCA-OCP-OCM. OCA考试可以在任意Oracle授权培训考试中心或者VUE考场报名考试. OCP证书必须经过ORACLE授权的原厂培训或者Oracl ...

  9. oracle认证都需要考哪几个方面,Oracle OCP认证要通过哪些考试

    Oracle OCP认证要通过哪些考试 Oracle OCP DBA认证是所有Oracle认证中最普及的一种认证,这一认证过程是专为那些想要从事Oracle管理的专业数据库管理人员设计的,适用于Ora ...

  10. oracle考试地点,Oracle11g认证考试主要途径

    Oracle 11g有400多项功能,经过了1500多个小时的测试,开发工作量达到了3.6万人/月,相当于1000名员工连续研发3年.Oracle 11g提供了高性能.伸展性.可用性和安全性,并能更方 ...

最新文章

  1. 思科三层交换机不同vlan互通_利用单个三层交换机实现不同vlan和不同网段之间互通(华为和cisco)...
  2. 关于ListView 自定义 Adapter的问题
  3. dhcp只能分配与路由器相同网段么_路由器的桥接详解
  4. 【洛谷习题】填涂颜色
  5. P2962 [USACO09NOV]灯Lights
  6. Spring Cloud 之 Ribbon,Spring RestTemplate 调用服务使用Hystrix熔断器
  7. System76 是如何打造开源硬件的
  8. EasyNVR摄像机无插件直播流媒体服务器前端构建之输入框样式的调整
  9. JavaScript实现模糊推荐的input框(类似百度搜索框)
  10. 百度开源的 71 个炸天项目
  11. Excel表格打印时不打印标记填充颜色
  12. Android Espresso(四)——RecyclerView
  13. 栈的应用-数制转换(C语言数据结构)
  14. IT男潘加宇:老婆在孩子班级群里怒怼数学老师
  15. outlook登录QQ邮箱
  16. 微信小程序渲染图片报错:[渲染层网络层错误] Failed to load local image resource
  17. 树莓派编译工作空间卡死
  18. JavaScript内存溢出
  19. JSP四大作用域,九大内置对象
  20. eclipse refreshing external folders解决方案

热门文章

  1. 3DS更新R4烧录卡内核
  2. 23届计算机专业毕设Java选题参考
  3. 【VS】错误1error LNK1168: 无法打开 F:\C++6\prob\ConsoleApplication1\Debug\ConsoleApplication1.exe 进行写入
  4. 大写金额用计算机简单些,大写一到十怎么写 数字一到十的大写怎么写(开票用的大写)...
  5. 思科服务器装了一个QJH8芯片,通过在操作系统Cisco的语音的CLI配置CA签名的证书(VOS)...
  6. 上海交通大学出版社python教材答案学生信息管理系统_学生信息管理系统任务书...
  7. 软件测试总结——常见的面试问题(一)
  8. C3P0连接池的基本配置与使用
  9. [Linux基础]读书笔记-老男孩核心系统命令实战1
  10. 湘潭大学计算机网络试卷答案,湘潭大学计算机网络试卷