Navicat ER模型不显示字段默认值和A_I标记,因其逆向工程默认不提取DEFAULT和AUTO_INCREMENT等物理层属性,仅采集主外键、类型、长度、是否为空等基础元数据。

Navicat ER模型不显示字段默认值和A_I标记的根源
不是数据库没写,也不是Navicat漏读,而是ER模型(.nm文件)在逆向工程阶段默认不提取、也不渲染DEFAULT和AUTO_INCREMENT这类物理层属性——它只抓主外键、类型、长度、是否为空、注释(需手动开)、以及表级ENGINE等基础元数据。字段默认值和自增标识属于MySQL DDL中的“列约束细节”,Navicat的模型引擎从不主动解析CREATE TABLE语句里的DEFAULT子句或AUTO_INCREMENT关键字,也不查INFORMATION_SCHEMA.COLUMNS.column_default。
哪些场景下你“以为该显示却没显示”
常见误判点:
- 你在「设计表」界面勾了
A_I并保存,但ER模型里字段右侧没出现AUTO_INCREMENT字样 → 这是正常的,模型不展示该标记 - 你用
ALTER TABLE t MODIFY c VARCHAR(20) DEFAULT 'N'加了默认值,导出模型后字段描述/属性栏里空空如也 → 模型根本不采集column_default字段 - 你右键表→「编辑表」看到
Default列填着'N',但双击模型里的表→「表属性」→字段列表里对应列的Default列是空的 → 因为模型字段编辑器的Default栏是只写(用于正向建模),不读(不反向同步数据库值)
想让默认值或A_I在ER图里“可见”,只能靠人工补录
Navicat没有自动映射机制,必须手动把信息塞进模型字段的特定字段栏,才能渲染到图上:
- 对于默认值:在模型中双击表→打开「表属性」→选中字段→在
Default栏(注意不是Comment或Description)里输入值,比如'N'或CURRENT_TIMESTAMP;保存后,该值会以小号灰色文字显示在字段类型右侧 - 对于自增标记:模型本身不提供
A_I开关,但你可以把文字AUTO_INCREMENT手动写进Description栏(Navicat 16/17)或Comment栏(Navicat 15),它就会出现在字段名右侧、类型左侧——但这只是纯文本,无语义 - 所有手动填入的内容,导出PDF/PNG时才可见;若从数据库节点直接点「ER 图」标签页打开,这些内容一律丢失,必须通过「模型窗口」打开并导出
为什么不能依赖「同步到数据库」来回填这些值
「同步到数据库」功能只做单向结构比对与推送,且明确排除以下字段:
-
DEFAULT值:即使模型里填了Default,同步时也不会生成ALTER COLUMN ... SET DEFAULT语句 -
AUTO_INCREMENT起点:模型里改不了AUTO_INCREMENT = N,同步时也完全忽略该元数据 - 字段级
COMMENT:Navicat 15 不支持同步,16/17 仅在「模型属性」启用「显示字段注释」后,才把模型里Description写回数据库的COLUMN_COMMENT,但反过来不行
也就是说,模型里填的Default和Description是孤岛式录入,既不来自数据库,也不写回数据库,纯粹为绘图服务。一旦你删掉模型重导,所有手工补的内容全部清零。











