navicat数据同步无“出错后继续”全局开关,该选项仅存在于导入向导中且仅对单行解析错误有效;跳过主键冲突需导出sql后手动改为insert ignore或on duplicate key update。
navicat 数据同步本身不提供“出错后继续”的全局开关,所谓「高级设置中勾选发生错误时继续」是个常见误解——它只在特定路径下存在,且仅对部分错误类型生效。
同步向导里根本没有「发生错误时继续」选项
Navicat 的「数据同步(Data Sync)」功能界面中,Data Sync 向导全程没有名为“发生错误时继续”或类似字样的勾选项。你看到的这个说法,实际混淆了三个完全不同的功能入口:
- 「导入向导(Import Wizard)」第 2 步「运行查询」页有
Continue after error(中文:出错后继续) - 「运行 SQL 文件」功能压根不提供该选项,必须换回导入向导
- 「数据同步」任务若想跳过冲突,唯一可行路径是导出为 SQL 脚本后手动加
INSERT IGNORE或ON DUPLICATE KEY UPDATE
真正能跳过主键/唯一键冲突的,只有 INSERT IGNORE 模式
当你遇到 ERROR 1062: Duplicate entry,Navicat 默认生成的是普通 INSERT INTO 语句,失败即停。它图形界面里没有开关可切换插入策略。
- 必须点同步向导最后一步的「保存为 SQL 文件」,打开生成的
.sql,把所有INSERT INTO t1替换为INSERT IGNORE INTO t1 - 如果需要保留旧记录、只更新变更字段,得改成
INSERT INTO t1 (...) VALUES (...) ON DUPLICATE KEY UPDATE col1 = VALUES(col1), ... - 注意:
INSERT IGNORE会静默跳过重复、截断、空值等错误,但也会掩盖真实问题,建议仅用于已知数据质量可控的场景
为什么勾了「跳过错误的记录」还是中断?
这个选项根本不在数据同步里,而是藏在「导入向导」或「Excel/CSV 导入」的末页 Options 中,且生效条件极苛刻:
- 只对单行解析错误有效(如某列填了文字进 INT 字段),对主键冲突、外键失败、语法错误完全无效
- CSV 含 BOM(
\xEF\xBB\xBF)会导致解析直接失败,连 Options 页面都进不去 - Excel 导入必须同时勾选「跳过错误的记录」和「继续导入其余记录」——只开一个等于没开
- 目标表字段类型太严格(如 DATE 列存了 "2024-02-30")会触发服务端校验,客户端跳过选项无感知
生产环境更稳的做法:绕过 Navicat GUI,用原生命令
图形界面的“跳过”机制不可靠,尤其在大表、高一致性要求场景下,推荐落地层控制:
- 用
mysqldump --insert-ignore重导源数据,再用 Navicat 导入向导加载该文件(此时Continue after error才真正起作用) - 直接在目标库执行:
LOAD DATA INFILE '/path/x.csv' IGNORE INTO TABLE t1,IGNORE关键字由 MySQL 原生支持,跳主键重复最可靠 - 同步前临时关约束:
SET FOREIGN_KEY_CHECKS = 0;,同步完再开,比依赖界面选项更透明可控
别指望 Navicat 在数据同步流程里自动处理错误续传——它的定位是可视化对比与执行,不是容错引擎。真正要跳过、要续传、要幂等,得从 SQL 语义和数据库原生命令入手,界面只是壳。











