Navicat同步模型后字段注释不显示是因图表默认关闭注释渲染,而非同步失败;需右键空白处→“选项”中勾选“显示表字段注释”和/或“显示数据库对象注释”,且该设置仅影响当前视图绘图行为。
Navicat同步模型时字段COMMENT不显示在图表里
不是同步失败,而是模型视图默认不渲染注释——comment 元数据其实还在模型文件中,只是没被“画出来”。navicat 的 er 图表有独立的显示开关,和数据库读取、同步逻辑无关。
打开模型后,右键空白处 → “选项” → 勾选 “显示表字段注释” 和/或 “显示数据库对象注释”。这个设置只影响当前模型窗口的绘图行为,不影响底层元数据存储。
如果勾选后仍不显示,检查两点:
- 数据库连接是否用了
ODBC或非原生驱动(如旧版 MySQL Connector/J);这类驱动常丢information_schema.COLUMNS.COLUMN_COMMENT字段,导致 Navicat 根本没读到注释 - MySQL 版本 ≤ 5.6 时,
SHOW FULL COLUMNS返回的注释字段可能为空,Navicat 会 fallback 到空值;建议升级到 5.7+ 或改用SELECT COLUMN_COMMENT FROM information_schema.COLUMNS手动验证
“Reverse Database to Model”后注释消失的真正原因
同步动作本身不会删注释,但会覆盖模型中已有的字段定义。如果你在模型里手动编辑过某个字段的 Comment(比如加了业务说明),再执行反向同步,Navicat 会用数据库里的 COMMENT 替换掉你手写的——这是设计行为,不是 bug。
关键点在于:Reverse Database to Model 只同步 information_schema 或 pg_catalog 中能查到的元数据,它不识别模型里“额外添加”的文本描述。
常见误操作:
- 同步前没备份模型文件(
.mwb),导致手写注释彻底丢失 - 数据库字段 COMMENT 本身为空(
SELECT COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_NAME = 'xxx'返回 NULL),同步后自然为空 - MySQL 使用了
utf8mb4字符集但 Navicat 连接参数没设characterSetResults=utf8mb4,导致注释读成乱码后被截断或丢弃
导出 Word/Excel 设计文档时注释为空
这和模型同步无关,是导出模块的编码与字段映射问题。Navicat 导出文档时,会从模型对象的 comment 属性取值,而该属性只在反向同步时从数据库加载一次。如果同步时没拿到,导出就必然为空。
验证方法:在模型中双击某张表 → 切到 “字段” 页签 → 查看每列的 Comment 列是否有内容。没有,说明同步环节就断了;有,但导出为空,大概率是导出模板没绑定该字段。
临时绕过方案:
- 导出前,在模型中全选字段 → 右键 → “编辑所选字段” → 手动补一遍
Comment(适合小库) - 用 Navicat 查询窗口执行:
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'your_db' AND COLUMN_COMMENT != '',把结果复制进 Excel 补充 - 避免用“数据字典”功能导出,改用
Tools → Report → Custom Report,自定义字段映射,强制包含COLUMN_COMMENT
MySQL 8.0+ 同步后注释变 NULL 的兼容性陷阱
Navicat 16.0 及更早版本解析 information_schema.COLUMNS 时,对 MySQL 8.0 新增的隐藏列(INVISIBLE)、生成列(GENERATED ALWAYS AS)支持不完整。这些列的 COLUMN_COMMENT 值可能被忽略或返回 NULL,同步后模型里对应字段的注释就丢了。
这不是权限或配置问题,是驱动层解析缺陷。解决办法只有两个:
- 升级 Navicat 至 17.0+(2026 年起官方明确声明支持 MySQL 8.0.30+ 全特性)
- 同步前,在数据库中临时把生成列转为普通列:
ALTER TABLE t1 ALTER COLUMN c1 SET DEFAULT 'dummy';,同步完成后再改回去(慎用于生产)
最易被忽略的一点:PostgreSQL 用户常以为 COMMENT ON COLUMN 一定生效,但若目标 schema 不在当前 search_path 里,Navicat 反向同步时根本查不到该注释——务必确认连接的 default schema 和注释所在的 schema 一致。











