数据库:Oracle 11g , MySQL 5.1
迁移工具:Navicat Premium
主要内容:
1、Navicat 提示 Cannot create oci environment.
2、[Err] [Dtf] 1170 - BLOB/TEXT column 'SERIALNO' used in key specification without a key length.
工作中一直用的是Oracle ,MySQL只是在平时自己用。之前有做过Oracle迁移到Oracle,这次略有不同,从 Oracle 到 MySQL。表和数据很多,手工折腾不切实际。正好Navicat Premium可以做。(安装和使用 Navicat Premium 步骤略)
业务数据不尽相同,数据基本无用,只是需要表,源数据库中视图、触发器、存储过程、函数等对象都不用,也不用考虑对存量数据的处理,所以整个迁移过程不难。以今天的文章开篇,算是给日后对Oracle和Mysql 数据库之间的差异对比做个开个头吧。
此文,主要写在迁移过程遇到的几个问题:
1、Navicat 提示 Cannot create oci environment.
解决方案:Tools->Options-> Miscellaneous -> OCI 用plsql的oci文件替换原来的oci文件。
2、[Err] [Dtf] 1170 - BLOB/TEXT column 'SERIALNO' used in key specification without a key length
迁移过程抛异常,原表中 SERIALNO的字段类型是 RAW [标注1]。
RAW在数据迁移时,不会发生字符集转换的!MySQL不允许在可变长字段上建索引。在stackoverflow上也有类似问题(https://stackoverflow.com/questions/1827063/mysql-error-key-specification-without-a-key-length#)
提供的解决方案有两种:
1、移除可变长度字段上的索引、主键约束;
2、设置其他字段为主键。
在这次数据迁移中,解决方案是:将Oracle的RAW类型转化成Varchar2类型,Oracle中的Varchar2 和 MySQL中的varchar是能正常转化的。SERIALNO主键约束依旧不变。
[标注1] RAW类型 用于存储二进制或字符类型数据,变长二进制数据类型,这说明采用这种数据类型存储的数据不会发生字符集转换。这种类型最多可以存储2,000字节的信息






