“高级选项”在navicat数据传输向导第三页右下角“选项”按钮中,用于控制异构数据库迁移的关键行为,包括表名大小写转换、引号标识符开关、主键与序列手动映射、视图及查询作为数据源支持等。
跨数据库迁移时,“高级选项”在哪找、管什么用
navicat 的 数据传输 向导里点“下一步”到第三页,右下角那个“选项”按钮就是入口——它不是锦上添花的设置项,而是决定异构迁移能否跑通的关键开关。mysql 到 oracle、postgresql 到 sql server 这类迁移,表名大小写、字段类型映射、主键生成逻辑全靠它干预。
大小写与双引号:MySQL 导出到 Oracle 最常崩的点
MySQL 默认不区分表名大小写,Oracle 默认全大写且强制用双引号包裹小写对象名。Navicat 一不留神就把 user_info 表传成 "user_info",结果你在 Oracle 里 SELECT * FROM user_info 直接报错 ORA-00942: table or view does not exist。
- 进
选项→高级标签 → 勾选转换为大写(对 Oracle/SQL Server 有效) - 或者反向操作:取消勾选
使用引号标识符,避免生成带双引号的 DDL - 若已传错,别重来——直接在 Navicat 中右键目标表 →
备份数据库导出 SQL,用文本编辑器全局替换"C##SWYTH_YS"."为空、"为空,再清空重导
自增字段怎么续上:MySQL 的 AUTO_INCREMENT 到 Oracle 没有原生对应
Navicat 不会自动帮你建序列或触发器。它只负责把数据 INSERT 进去,但目标表若没主键值,就会卡在 ORA-01400: cannot insert NULL into ("ID")。
- 迁移前手动在 Oracle 里建好序列:
CREATE SEQUENCE ID_SEQUENCE INCREMENT BY 1 START WITH 1 - 在
选项→高级中,关闭自动识别主键,改用手动映射把源id字段绑定到目标ID_SEQUENCE.NEXTVAL(需目标字段允许 NULL 或设默认值) - 更稳妥的做法是:先仅传结构,手工补序列+触发器,再用“仅数据”模式重传
视图当源、查询当源:很多人不知道它能迁“非表对象”
Navicat 的 数据传输 支持视图甚至自定义 SQL 查询作为数据源,但前提是目标库已有匹配结构的物理表——它不会帮你建表,也不会推断视图里的函数兼容性。
- 确认源端能执行
SELECT * FROM your_view LIMIT 1不报错 - 目标端必须提前建好表,字段名、顺序、类型尽量对齐;比如 MySQL 的
DATETIME要对应 PostgreSQL 的TIMESTAMP WITHOUT TIME ZONE - 在
数据传输左侧对象列表里,展开“视图”节点勾选,而不是只盯着“表”文件夹 - 若视图含
GROUP BY或窗口函数,跨库时大概率失败,得先在源端建临时表落盘再迁
真正麻烦的从来不是点几下鼠标,而是你得清楚哪一步 Navicat 不会替你兜底:序列、触发器、约束依赖、字符集隐式转换……这些都得在点“开始”之前,亲手铺平。











