我有一个十分久远的mysql数据库脚本文件(.sql格式),现在我想将此数据库导入oracle数据库中,在网上搜集了一些解决办法,其中利用Dbmover for mysql to oracle这个工具比较简单,所以,就用了这个工具。
首先,将sql脚本中的数据库结构与数据导入mysql数据库中,利用source命令。可是,在导入的过程中,提示ERROR1366 错误。
在网上搜了一些内容,得到的结论是sql文件的编码与数据库的字符集编码不一致导致的。下面就开始了修改编码,使它们能够统一。
先将sql脚本利用记事本工具另存为UTF-8编码格式
然后,将sql数据库中的字符集编码统一为utf8
最后利用source导入,成功。
可是,在cmd中查看表中的一些汉字信息时,还是出现来了乱码,但是在navicat中,却可以正确显示。
我思考我的数据本身是没有问题的,是不是mysql某个部分的编码需要修改,所以对character_set_client、character_set_server、character_set_connection、character_set_results通通都试了一遍,将其值改为gbk,然后在cmd中用select查找显示。最终,在测试character_set_results时,在cmd中查看汉字可正常显示,在navicat中亦可正常显示,问题解决。
下面,运行Dbmover for mysql to oracle工具:
首先,输入mysql服务器的用户名和密码:
接着进行mysql的连接设置:
然后,选择oracle服务器的连接方式,选择客户端模式即可,因为服务器就安装在本机,客户端oraclelistener默认是运行的。
然后,配置oracle的登录名、密码、服务名(数据库名)。
最后,选择要转换的表,进行转换即可。
但是,在第一次尝试时,出现了8个错误。
经过检查,发现主要是ORA-00910错误,到网上搜了下,解释如下:
Oracle Database Error ORA-00910
ORA-00910 specified length too long for its datatype
问题
for datatypes CHAR and RAW, the length specified was > 2000; otherwise, the length specified was > 4000.
解决
use a shorter length or switch to a datatype permitting a longer length such as a VARCHAR2, LONG CHAR, or LONG RAW
我就开始检查,转换后的类型,有没有超出其在oracle下预定的范围,发现了varchar(10000)类型。而,varchar(10000)类型的,范围是:
Variable-length character string having maximum length size bytes or characters. Maximum size is 4000 bytes or characters, and minimum is 1 byte or 1 character. You must specify size for VARCHAR2.
来自:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#i45694
所以,在先将mysql中哪些越界的字段修改 alter table操作,
然后重新转换,这一次转换是成功的。