Navicat Data Modeler 不提供内置模型版本 diff 功能,需手动加载两个 .ndm 模型至同一工作区或双实例并行,再通过 Tools → Compare Models 比对结构差异;.ndm 文件不可直接 diff,应导出为 SQL 后用外部工具比对,并将 SQL 纳入 Git 实现真正版本控制。
navicat data modeler 本身不提供类似 git 的“模型版本 diff”功能,它没有内置的模型历史快照或版本树。所谓“比较两个模型版本”,实际是指比较两个独立的 .ndm 文件(或两个物理模型对象),必须手动加载、对齐、比对——不是点一下就出差异报告。
如何加载两个模型进行并行比对
Navicat Data Modeler 不支持单窗口内打开多个模型文件进行叠加比对。你必须分步操作:
- 先打开第一个模型(
File → Open),确保它在当前工作区中处于激活状态 - 再通过
File → New Model或File → Import → From Database加载第二个模型——注意:这不是“打开第二个 .ndm”,而是新建一个模型后,用逆向工程或导入方式重建结构 - 若两个模型都已存在为
.ndm文件,更稳妥的做法是分别打开两个 Navicat Data Modeler 实例(Windows 上可运行多个进程;macOS 需按住Option键双击图标启动新实例) - 确保两个模型使用相同的数据库类型和版本(例如都是
MySQL 8.0),否则字段类型、约束语法等差异会被误判为“变更”
用“模型比对”功能识别结构差异
Navicat Data Modeler 的 Tools → Compare Models 是唯一能自动识别差异的入口,但它只接受“模型对象”而非文件路径——也就是说,你必须先把两个模型都加载进同一个工作区(通过复制粘贴表/实体,或导出再导入为新模型),否则该菜单项是灰色不可用的。
- 进入
Tools → Compare Models后,左侧选“源模型”(通常是旧版),右侧选“目标模型”(新版) - 勾选要参与比对的元素类型:
Tables、Views、Indexes、Foreign Keys等;未勾选的类型不会出现在差异报告中 - 点击
Compare后,结果以表格形式列出:Added、Deleted、Modified三类,但Modified仅显示“字段数变化”或“主键变更”,不展示具体哪一列被改了类型或长度 - 生成的差异脚本(
Generate Synchronization Script)默认是“将目标模型同步到源模型”,方向反了需手动调整逻辑
为什么直接比对 .ndm 文件不可靠
.ndm 是二进制封装格式,不是纯文本 SQL 或 JSON。即使你用十六进制工具打开,也看不到表名或字段定义——它的内部结构包含 UI 布局坐标、图层信息、用户偏好设置等无关元数据,这些会随保存动作随机变动,导致两次保存的同一模型文件 diff 出大量“假差异”。
- 真正可比的是导出后的 DDL:右键模型 →
Export → SQL File,分别导出两个版本的CREATE TABLE脚本,再用diff工具(如 VS Code 内置比较、Beyond Compare)逐行比对 - 导出时务必选择相同选项:勾选
Include DROP statements、统一字符集(如utf8mb4)、禁用Auto-increment value等非结构属性 - Navicat 导出的 DDL 默认带执行顺序注释(如
-- Table structure for `users`),这类注释不参与数据库执行,但会影响 diff 结果,建议导出后用脚本清洗掉
真正的模型版本控制不在 Navicat 内部,而在你导出的 SQL 文件是否纳入 Git、是否按语义化命名(如 v20260715_add_user_status.sql)、是否有配套的变更说明文档——Navicat 只是画图和生成器,不是版本系统。


















