Navicat 15 不支持“定时导入+自动忽略主键冲突”一体化配置,需拆解为两步:MySQL 导入须满足目标表有主键/唯一索引、选“追加”模式、字段映射页手动勾选“忽略重复项”且字段名严格一致;SQL Server 则必须改用“Update”模式并手动激活主键“匹配”;定时运行仅 Premium 版本可通过保存 .ncx 文件 + 命令行调用 + 系统计划任务实现,并务必启用“隐藏进度窗口”。

Navicat 15 本身不支持“定时导入 + 自动忽略主键冲突”的一体化配置——它没有内置调度器来周期性执行导入任务,也没有一个开关能同时搞定“定时”和“跳过重复主键”。你必须拆解成两个独立问题分别处理:先确保导入逻辑能跳过冲突,再用外部机制触发它。
MySQL 导入时如何真正跳过主键/唯一键冲突
Navicat 在 MySQL 下的「忽略重复项」本质是生成 INSERT IGNORE,但只在满足全部硬性条件时才生效:
- 目标表必须已存在,且至少有一个
PRIMARY KEY或UNIQUE索引(用SHOW CREATE TABLE table_name验证) - 导入类型必须选「追加」,不能是「更新」或「替换」
- 导入向导第 2 步(字段映射页)右下角手动勾选「忽略重复项」——这个选项不在「高级」里,也不在「选项」页
- 源文件中的主键字段名(如
id)必须与目标表字段名**完全一致**:大小写、下划线、空格都不能差;映射错位(比如把source_id映射到user_id)会导致 Navicat 根本识别不了冲突依据
如果勾了但还报 ERROR 1062,大概率是表结构没索引、模式选错,或字段映射没对齐。Navicat 不会报错提示哪条不满足,只会静默禁用该功能。
SQL Server 导入时不存在“跳过重复记录”这回事
SQL Server 没有 INSERT IGNORE 或 ON DUPLICATE KEY UPDATE 语义,Navicat 的「跳过重复记录」复选框在 SQL Server 导入中要么灰色不可用,要么点了也无效——底层 JDBC 驱动遇到 Error 2627 仍会中断事务。
- 唯一可行路径:导入向导第 2 步 → 将操作模式从
Insert改为Update→ 手动点击主键列右侧的「匹配」复选框(哪怕看起来已高亮,也必须点一下) - 若目标表有联合唯一约束(如
email + phone),Navicat 不支持多字段匹配,得提前在 SQL Server 中建视图或计算列收口 - 别碰「高级」页里的
Continue on error,它对 SQL Server 导入无响应,强行启用可能导致数据错位
怎么让导入任务“定时”运行起来
Navicat 15 Premium(仅此版本)允许你把导入任务保存为 .ncx 文件,再通过命令行调用它,最后交给系统计划任务调度:
- 先手动走一遍导入向导,确保「忽略重复项」已生效(MySQL)或已切为
Update模式(SQL Server),然后点击「保存」生成一个import_task.ncx - Windows 下用命令行调用:
navicat.exe --import "C:\Tasks\import_task.ncx";macOS 下:/Applications/Navicat\ Premium.app/Contents/MacOS/navicat --import "/Users/me/Tasks/import_task.ncx" - 关键设置:在导入向导「高级」页勾选「隐藏进度窗口」,否则后台运行时弹 GUI 窗口会导致任务失败
- 配合系统计划任务时,务必用管理员权限运行,并重定向日志:
navicat.exe --import task.ncx >> import.log 2>&1
注意:--import 参数只在 Navicat Premium 15 有效;Standard 或 Essentials 版本不支持该命令行接口,也无法保存为 .ncx。
容易被忽略的细节
Excel 导入时主键字段显示大量 0 或 NULL,不是数据问题,而是 Navicat 把空单元格解析成显式值插进自增列,触发了 MySQL 的 sql_mode=no_auto_value_on_zero 行为。解决办法是在字段映射页直接取消勾选主键列(如 id),让它彻底不出现在 INSERT 语句中。
CSV 文件带 BOM(\xEF\xBB\xBF)会导致导入向导根本打不开「Options」页,连「跳过错误」的勾选项都看不到——预处理时先用 VS Code 或 Notepad++ 转成 UTF-8 without BOM。


















