Navicat 导出 ER 图出现乱码或空白,根本原因是其默认用本地字体和私有布局引擎渲染,.nvm 文件不包含完整样式信息且不跨平台兼容;操作系统字体差异或版本不一致会导致布局错位、文字重叠甚至不加载。
Navicat 里导出 ER 图时,为什么团队成员打开是乱码或空白?
根本原因是 navicat 默认用本地字体和私有布局引擎渲染 er 图,导出的 .nvm 文件不包含完整样式信息,且不跨平台兼容。多人协作时,只要操作系统字体不同(比如 macos 用户装了思源黑体,windows 同事只有微软雅黑),或者 navicat 版本差一个大版本(如 16.0 vs 17.1),
er 图布局就可能错位、文字重叠甚至完全不加载。</p> <p>实操建议:</p> <ul> <li>导出前统一用 <code>File → Export → ER Diagram as PNG/SVG,别依赖
.nvm 共享;SVG 更适合嵌入 Confluence 或设计稿
Tools → Options → Display → Use system font for diagram,改用内置 DejaVu Sans 字体(Navicat 15+ 内置)user_profile 不用 用户档案表,否则 SVG 导出后文字宽度计算失准多人同时编辑同一个 Navicat 模型文件(.nvm)会冲突吗?
会,而且 Navicat 完全不提供任何合并机制。它把整个模型存为单个二进制 .nvm 文件,没有版本控制意识。Git 提交时显示为“binary file changed”,无法 diff,也无法 resolve conflict。
实操建议:
- 禁止把
.nvm放进 Git 仓库——它不是代码,是中间产物 - 用
Database → Reverse Engineer to Model从真实库重建模型,作为唯一可信源;每天晨会前执行一次,确保模型和生产结构一致 - 若必须保留设计稿,改用
Export → SQL File (DDL only),导出CREATE TABLE语句,这类文本可 diff、可 review、可 CI 校验
Navicat 的「同步模型到数据库」功能在团队协作中有哪些隐藏风险?
它默认启用 Drop and recreate foreign key 和 Recreate index,哪怕你只改了一个字段注释。一旦误点「Synchronize」,可能触发线上表锁、主从延迟飙升,甚至因外键依赖顺序错误导致同步中断。
实操建议:
- 永远勾选
Generate synchronization script only,先生成 SQL,再人工审查每一条ALTER TABLE - 禁用
Automatically drop unused objects—— 团队里有人删了测试字段,别人还没 merge,一同步就把字段真删了 - 对
production环境连接,直接在Connection Properties → Advanced里勾选Read-only mode,物理阻止同步操作
有没有比 Navicat 更适合协同建模的替代方案?
有,但不是为了“更好看”,而是为了解决 Navicat 缺失的协作原语:文本化、可 diff、可自动化。比如用 dbdiagram.io 画初稿,导出 schema.sql;或用 SQLFluff + Mermaid 在 Markdown 里写带注释的 ER 描述,CI 自动转图。
实操建议:
- 小团队可直接用
mermaid-cli渲染erDiagram语法,示例:erDiagram\n users ||--o{ posts : "has"\n users {\n int id\n varchar email\n },存为schema.mmd,Git 友好 - 已有 Navicat 模型?用
Database → Export → Data Transfer → Export to SQL File,再用sqlparse或正则提取表结构,喂给 Mermaid 脚本 - 别指望一个工具解决所有问题:Navicat 做日常查询和快速逆向,文本 Schema 做评审和归档,这才是现实可行的分工
真正卡住团队的从来不是画图好不好看,而是模型变更能不能被看见、被讨论、被回滚。只要还在靠双击 .nvm 文件传递设计意图,协作就只是幻觉。


















