Navicat生成HTML报告需先完成结构对比并确认状态栏显示“Differences found”,点击“Generate Report”后必须勾选“Include detailed differences”,否则仅列明表名而无字段增删改详情;报告不含建表语句和可执行SQL,需通过“Synchronize to Database”预览或“Save as SQL File”导出sync.sql;注意中文路径、浏览器兼容性及未覆盖的DDL项(如索引顺序、分区定义)。
Generate Report 按钮能生成 HTML 报告,但默认不显示字段级差异——必须手动勾选 Include detailed differences,否则报告里只有表名列表,看不出增删改。
点「Generate Report」前必须确认状态栏显示 “Differences found”
结构对比窗口右下角状态栏没出现明确提示(比如 differences found 或 no differences),说明比对未真正完成。常见原因包括:
- 误点了「Data」或「Structure & Data」,但 HTML 报告只反映你当时选的
Structure范围 - 用了对象过滤器(如只比
tb_user),报告里就不会出现其他表,但界面仍显示全部表名,容易误判为“漏了” - 源库/目标库连接名看错了——右键任意差异行 →
Properties,核对Source和Target显示的数据库名是否和你预期一致
HTML 报告里为什么没有建表语句和 ALTER SQL?
Navicat 原生 HTML 报告只做差异展示,不生成可执行 DDL。想拿到 SQL,得走另一条路:
- 单张表:右键 →
Synchronize to Database→ 点「Next」到第三步,预览页会显示估算的ALTER TABLE语句(注意:只是预览,未执行) - 批量获取:全选差异项(
Ctrl+A)→ 右键 →Save as SQL File,保存为sync.sql - 别指望 HTML 报告带
CREATE TABLE:缺失表的建表语句不会自动补全,Synchronize to Database也不会帮你创建——它只输出变更脚本,你得自己执行
中文路径、老浏览器、MySQL 8.0+ JSON 字段都可能让报告“看起来不对”
生成后双击打开 report.html,常见异常表现和对应动作:
- 本地打不开或表格空白:路径含中文或空格 → 改用纯英文+下划线命名,如
schema_diff_202607 - Safari 拒载 JS 导致折叠面板不渲染:换 Chrome 或 Edge 打开;Navicat 16 版报告依赖
report.js,离线环境要确保该文件同目录 - 某张表标为
different,但报告里字段对比写N/A:Navicat 15 对 MySQL 8.0+ 的JSON字段识别有延迟,需手动查SHOW CREATE TABLE确认实际结构 - 索引顺序、分区定义、外键引用名等 DDL 细节不会出现在报告中:这些属于 Navicat 未覆盖的 DDL 项,报告不体现,也不能靠它做上线依据
sync.sql + 目标库版本做语法校验,尤其注意 COLLATE、AUTO_INCREMENT 初始值、跨表外键依赖这三类 Navicat 不检查却极易出错的地方。


















