怎么将oracle的sql文件转换成mysql的sql文件
2个回答
展开全部
转换一般会遇到的问题:
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 要宽松得多。解决办法要么改索引的定义,要么改字段的定义长度。
6、SQL中函数名称不一致
可以在网上找oracle 常用函数 与mysql 的对照表,然后逐一修改。网上也可以找到简单的转换工具,效果自己判断。
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 要宽松得多。解决办法要么改索引的定义,要么改字段的定义长度。
6、SQL中函数名称不一致
可以在网上找oracle 常用函数 与mysql 的对照表,然后逐一修改。网上也可以找到简单的转换工具,效果自己判断。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询