ER图中文注释变问号或方块,根源是连接层字符集未生效,需在Navicat连接高级设置中勾选“使用MySQL字符集”并设为utf8mb4,同时在初始化命令中手动添加SET NAMES utf8mb4;,重启连接后刷新ER图。
ER图里中文注释变成问号或方块,先确认连接层字符集是否生效
navicat 生成 er 图时,表注释(comment)是从数据库元数据读取的,不是编辑器渲染的文本。如果显示乱码,说明它拿到的字节被错误解码了——根源几乎都在连接建立时没声明对字符集。
执行 SHOW VARIABLES LIKE 'character\_set_client';,若返回 latin1 或 gbk,就坐实了问题:Navicat 没告诉 MySQL “我要用 utf8mb4 解析后续所有元数据”。
- 右键对应连接 → 编辑连接 → 高级 → 勾选「使用 MySQL 字符集」→ 下拉选
utf8mb4(不是utf8) - 更关键的是,在同一页面的「初始化命令」框中,手动填入:
SET NAMES utf8mb4; - 必须重启该连接(先断开再重连),否则新设置不触发元数据重载
ER图刷新后仍乱码?检查数据库、表、字段三级 COMMENT 存储编码
即使连接层设对了,如果注释当初是用错误编码写入的,ER 图读出来还是乱码。MySQL 的 information_schema.TABLES.TABLE_COMMENT 和 COLUMNS.COLUMN_COMMENT 是直接存的字节流,不会自动转码。
- 查当前注释是否已损坏:
SELECT TABLE_NAME, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_db' AND TABLE_COMMENT != '';,看结果是不是一堆 或乱码字符串 - 若已损坏,不能靠改连接修复,得用
ALTER TABLE ... COMMENT = '新注释';重写;注意执行前确保连接已设SET NAMES utf8mb4; - 已有表的字段注释同理:
ALTER TABLE t MODIFY COLUMN c VARCHAR(10) COMMENT '用户ID';
导出/重新生成 ER 图时注释又乱?关掉 SQL 预处理和自动编码检测
Navicat 16+ 默认开启 SQL 预处理,它会悄悄把元数据里的中文字符串转成 Unicode 转义序列(如 \u7528\u6237),再喂给 ER 图渲染模块——而后者不认这种格式,直接当无效字符丢弃或显示为方块。
- 菜单栏 → 工具 → 选项 → SQL 编辑器 → 取消勾选「启用 SQL 预处理」
- 同时检查:工具 → 选项 → 常规 → 默认字符集是否为
UTF-8;如果不是,改完必须重启 Navicat - 生成 ER 图前,右键连接 →「刷新」,别依赖自动缓存;或者删掉本地缓存:
%AppData%\PremiumSoft\Navicat\Cache目录
Mac 用户特别注意字体与 Qt 渲染冲突导致的注释截断或错位
ER 图中的中文注释若显示不全、位置偏移、或部分字被裁切,大概率不是编码问题,而是 Navicat(基于 Qt)在 macOS 上调用系统字体时 fallback 失败。Helvetica Neue、SF Pro 等可变字体常触发此问题,跟乱码现象高度相似但根因不同。
- Navicat → 偏好设置 → 外观 → 编辑器字体 → 改为
Monaco或SF Mono(非 SF Pro) - 避免使用「系统字体」或「苹方」,它们在 Qt 渲染路径中缺乏完整 glyph 映射
- 若仍异常,临时关闭 macOS 的「字体平滑」:系统设置 → 辅助功能 → 显示 → 关闭「字体平滑」
CREATE TABLE ... COMMENT '用户表' 执行错编码就埋下了。


















