Navicat 15 连接 Oracle 前必须手动配置 OCI:下载匹配版本的 Oracle Instant Client(如19.22.0.0.0),解压后在“工具→选项→其他→OCI”中指定 oci.dll 路径并重启软件,否则报“Cannot load OCI DLL”错误。
Navicat 15 数据传输前必须配置 OCI,否则连不上 Oracle
不装 instant client,cannot load oci dll 错误必现,且不会提示具体缺哪个文件。navicat 15 默认不带 oci 支持,必须手动指定 oci.dll 路径:
- 下载 Oracle 官方
instantclient-basic-windows.x64-19.22.0.0.0.zip(匹配你的 Oracle 服务端版本,11g/12c/19c 均可向下兼容) - 解压后找到
oci.dll,路径类似instantclient_19_2\oci.dll - Navicat → 工具 → 选项 → 其他 → OCI → 点击“…”选中该
oci.dll - 重启 Navicat,再测试 Oracle 连接;若仍报
ORA-12737: Instant Client Light: unsupported server character set,说明字符集不匹配,需换用数据库服务器本机的oci.dll(通常在$ORACLE_HOME\BIN\下)
DATE 类型迁移失败?Oracle 的 DATE 在 MySQL 里会变 TIMESTAMP 或丢失精度
Oracle 的 DATE 实际包含年月日 + 时分秒(精度到秒),而 MySQL 的 DATE 只存日期部分。Navicat 15 默认把 Oracle DATE 映射为 MySQL TIMESTAMP,但仍有两个坑:
- 如果源库
DATE字段含毫秒(比如由 Java 应用写入),MySQLTIMESTAMP(6)才能保留,但 Navicat 不自动加精度声明,结果截断成秒级 - 某些老版 MySQL(如 5.6)不支持
TIMESTAMP默认值为CURRENT_TIMESTAMP,迁移后建表语句直接报错 - 稳妥做法:在 Oracle 端提前运行存储过程,把所有
DATE字段转成TIMESTAMP(6);或改用“导出 SQL 文件”模式,在文件里全局替换DATE→TIMESTAMP(6)
NUMBER → DECIMAL / INT 映射混乱,主键和自增怎么处理
Oracle 的 NUMBER 没有固定宽度概念,Navicat 15 一律转成 DECIMAL(p,s),导致 MySQL 里主键不能设 AUTO_INCREMENT、索引失效、甚至插入报错 Incorrect integer value:
- 若 Oracle 字段定义是
NUMBER(10,0)或NUMBER(38)且只存整数,应在 Navicat “数据传输”弹窗中点击“选项”→勾选“转换数据类型”,再手动把目标类型改为INT或BIGINT - 若字段是主键且需自增,MySQL 不支持
NUMBER直接映射为AUTO_INCREMENT,必须在目标表建好后单独执行:ALTER TABLE t MODIFY COLUMN id BIGINT AUTO_INCREMENT PRIMARY KEY; - 注意:Navicat 不会自动加
NOT NULL,而AUTO_INCREMENT要求列非空,漏掉会报错
中文乱码、max_allowed_packet 不足、长文本被截断
这些不是 Navicat 界面问题,而是底层连接和 MySQL 配置没对齐:
- MySQL 服务端字符集必须是
utf8mb4(不是utf8),尤其含 emoji 或四字节中文时;检查命令:SHOW VARIABLES LIKE 'character\_set\_%';,重点确认character_set_server和collation_server - 若迁移中途报
MySQL server has gone away或大量数据插入失败,大概率是max_allowed_packet太小;登录 MySQL 执行:SET GLOBAL max_allowed_packet = 1073741824;(1G),并写入my.cnf的[mysqld]段持久化 -
CLOB/NCLOB在 Navicat 中默认转成MEDIUMTEXT,但若单条记录超 16MB,仍会失败;此时只能分批导出,或改用mysqldump+LOAD DATA INFILE绕过 Navicat
真正麻烦的从来不是点“开始”那一秒,而是 Oracle 的 NUMBER 没声明精度、DATE 被当成纯日期、字符集在三个地方(客户端/连接/服务端)各设一遍却漏了一个——这些细节不提前卡住,传输完成后再查数据不一致,代价远高于多花十分钟配 OCI 和调参数。











