文章关键字:|oracle|移植|mysql|问题|解决方法|逻辑|数据库|兼容性|
客户用的数据库是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)。这样永远不会出现保留字引起的问题。
原文地址:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=9206
分享到:
相关推荐
本文将详细讲解如何使用Oracle SQL Developer工具进行这样的迁移过程,以及如何解决在迁移过程中遇到的问题。 首先,确保你拥有正确的工具。在这个案例中,你需要MySQL 5.6.37、Oracle 11g以及Oracle SQL Developer...
项目做好了,更高的要求被提出来,比如,要多数据库支持,怎么办?... 作为一个开源数据库,MySQL用无数案例证明了她的可用性,因此让我们把重点放在如何将Oracle移植到MySQL上。已经有很多的文章和专题介绍了Ora
近些天在做一个同步功能,需要将mysql数据库中的某两张表的数据同步到oracle,考虑到表的字段较多,一个个写肯定不行,借助工具Convert Mysql to Oracle来转换!mysql中表与数据移植到oracle的纯绿色软件
Oracle到MySQL转换器是将数据库从Oracle迁移到MySQL服务器的工具。由于直接连接到源数据库和目标数据库,该程序保证了转换过程的高性能。它不使用ODBC或任何其他中间件组件。不需要安装Oracle组件。安装包包括产品到...
本篇文章将详述从Oracle数据库到MySQL的迁移过程,主要关注关键步骤、工具选择以及可能遇到的问题。 首先,我们需要理解Oracle和MySQL之间的核心差异。Oracle是商业级的关系型数据库管理系统,以其强大的性能和高级...
1. **兼容性问题**:处理MySQL特有的特性,如FROZEN列、TINYINT等,可能需要在Oracle中找到相应的替代方案。 2. **性能差异**:Oracle的优化策略与MySQL不同,可能需要调整SQL查询以适应Oracle。 3. **权限管理**:...
- **乱码验证**:检查Oracle数据库中是否存在乱码问题,特别是针对中文或其他非英文字符。 综上所述,MySQL到Oracle的数据迁移涉及多个步骤和技术细节,需要严格按照上述流程操作,并在每个环节仔细核对,确保数据...
在这种情况下,"ORACLE移植到SQL SERVER上的软件"提供了一种解决方案。 该软件的主要功能是使用“SQL Server Migration Assistant”(SSMA),特别是针对Oracle的版本——SSMA for Oracle。SSMA是一种工具,它简化...
MySQL的视图在某些方面可能有特定限制,比如SELECT语句的复杂性,这可能影响到从Oracle移植过来的视图的兼容性。在移植过程中,需要检查并调整视图定义以适应MySQL的语法和限制。 6. **移植策略**: - 数据转换:...
解决方案是确保MySQL的数据库名与Oracle的大小写一致,表名和应用程序中的SQL字符串保持一致,对于字段名,如果在应用程序中使用了双引号,应确保SQL中的大小写与双引号内的字符相同。 2. **保留字问题**:Oracle...
Oracle的LONG对应MySQL的LONGTEXT,可能需要处理主键长度问题,以及TEXT类型需指定长度。 - **日期类型**:Oracle的DATE对应MySQL的DATETIME,TIMESTAMP(N)对应TIMESTAMP。需要注意的是,TIMESTAMP在MySQL中没有...
Oracle到MySQL转换的过程中,会遇到一系列的语法差异和功能不匹配的问题。以下是对这些关键问题的详细说明: 1. **字段类型的区别**: - `NUMBER(10,0)`在Oracle中相当于MySQL的`INT`,而`NUMBER(10,2)`则对应`...
本文将会详述如何使用Oracle提供的工具——SQL Developer将MySQL数据库转换为Oracle数据库的详细步骤,包括准备工作、使用说明、创建数据库连接信息以及数据移植过程,最后通过PL/SQL工具进行登录验证。 一、工具...
本文档旨在介绍一种从 Oracle 数据库迁移到 MySQL 的方案。起初,项目使用的是本地 Oracle 数据库作为数据源,但考虑到每次运行系统都需要手动启动,并且需要在本地安装数据库的情况,这种配置显然不利于系统的移植...
这个Mysql版数据脚本就是为此目的而创建的,它试图将Oracle的“HR”(人力资源)示例方案移植到MySQL中。 "HR"示例方案是Oracle数据库中的一个标准样例,它包含了一系列与人力资源管理相关的表,如员工、部门、职位...
用户权限的移植涉及到角色和权限的重新分配,视图的语法可能需要调整,索引类型的变化(如Oracle的位图索引),同义词在MySQL中可能需要通过别名来实现,游标和约束的语法也存在差异。 六、SQL语句的调整 由于...
在Java中,Java Database Connectivity (JDBC) 是一个标准的API,它允许Java应用程序连接到各种类型的数据库,包括Oracle和MySQL。 Oracle是世界上最广泛使用的商业关系型数据库管理系统之一,由Oracle公司提供。在...
总之,Oracle到MySQL的数据移植是一项复杂的工作,涉及到多个层面的技术问题,包括但不限于数据类型映射、数据转换、数据库结构的重构以及后期的测试和维护。通过使用专业工具和遵循适当的迁移流程,可以有效地降低...
先有个免费工具,但每个表只能移植5条记录(clob blob等大数据类型都能处理)。若要代码自动批量移植,请MSN联系:dy-fairy@hotmail.com
一、数据库迁移——MySQL举例 1、解压 migration-4.1.4-2023-11-23.zip 2、打开 migration 工具 3、点击帮助菜单,可查看使用说明文档,如下图所示 二、迁移步骤: 1、新建组,随便起名。 2、数据库连接,新建 源库 ...