navicat 16 不支持结构同步的真正定时自动导出报告,必须通过 windows 任务计划调用 navicatcmd.exe 运行导出的 .ncx 文件,并手动补全 html 报告生成逻辑。

navicatcmd.exe 执行已导出的 .ncx 文件,并手动补全 HTML 报告生成逻辑——否则你看到的永远是弹窗,不是文件。
为什么点「自动运行」后结构对比从不执行?
Navicat 的「自动运行」对结构同步任务完全无效:它只支持备份、同步、数据传输等 12 类操作,但**不包含结构对比(Structure Sync)本身**。你点击“比较”产生的临时状态不会被保存为可调度作业,更不会触发报告生成。
- 点开工具 → 结构同步 → 比较完就关掉?那什么都没留下,
.ncx文件根本没生成 - 右键标签页选「导出任务」时没看到 Differences found 提示?说明对比没完成,导出的
.ncx是空壳,命令行运行会静默退出 - 勾选了「自动运行」但没导出为批处理脚本?这和没配一样——Navicat 不会自己注册到系统调度器
必须先导出为 .ncx 文件,且命名/路径要严格匹配
.ncx 是唯一能被命令行识别的结构同步任务格式,但它不存 SQL 或 DDL,只记录连接名、比对范围和选项(比如是否比较注释、字符集、外键)。导出前务必确认:
- 源库和目标库连接都已测试成功,且「高级」设置中
Character set一致(如都设为utf8mb4),否则字段名乱码导致误判 - 右键结构同步标签页 → 「导出任务」→ 保存为带明确环境标识的文件名,例如:
prod_vs_staging_struct.ncx - 文件路径不能含中文或空格;若必须放非英文路径,请在任务计划中用英文双引号包裹全路径
- 导出时勾选「Compare column comments」和「Compare index comments」——老系统常靠注释区分字段用途,漏选等于白比
Windows 任务计划里必须用 navicatcmd.exe,参数不能错
用 navicat.exe 调用结构同步会卡在 GUI 初始化,无桌面会话时直接退出;navicatcmd.exe 是纯命令行入口,但它的参数和 UI 里的命名不一致:
- 「程序或脚本」填完整路径:
"C:\Program Files\PremiumSoft\Navicat Premium 16\navicatcmd.exe" - 「参数」栏严格写:
--runjob="D:\jobs\prod_vs_staging_struct.ncx"(注意英文双引号,路径大小写敏感) - 「起始于(可选)」必须填:
C:\Program Files\PremiumSoft\Navicat Premium 16(不是脚本路径,也不是空) - 安全选项里必须勾选:不管用户是否登录都要运行 + 使用最高权限运行,否则报错
0x80070005或静默失败
HTML 差异报告不会自动生成,得靠额外手段补全
执行 --runjob 后 Navicat 会弹出对比结果窗口,但不会点「Generate Report」,也不会保存 HTML。这是命令行能力边界,不是配置错误。
- 最简方案:在
.ncx导出时勾选「Save as SQL File」,生成sync.sql,再用 Python 脚本解析它生成轻量 HTML(几行正则就能提取 CREATE/ALTER 行) - 折中方案:用 AutoHotKey 写个脚本,在
navicatcmd.exe启动后延时 3 秒模拟 Ctrl+S → 回车(需确保窗口焦点稳定,Win10/11 更新后易失效) - 别碰「自动发送邮件」选项:Navicat 不支持结构对比结果自动附 HTML,该功能只对备份/同步任务有效
.ncx 文件导出那一刻有没有看到 Differences found,以及任务计划里「起始于」字段是不是空着——这两个地方一错,后面全白忙。











