Navicat 16+ 导出SVG时中文显示为方块或空白,因导出模块绕过系统字体栈,仅依赖不含中文字形的内置字体(如DejaVu Sans);需手动配置系统字体并用Inkscape修复或双格式导出。

导出SVG时文字显示为方块或空白
Navicat 16+ 支持导出 SVG 格式,但默认不启用系统字体渲染,导致中文文字被转成不可识别的 glyph 或直接丢弃。本质是 SVG 导出模块绕过了操作系统字体栈,只依赖内置的有限字体(如 DejaVu Sans),而这些字体不含中文字形。
- 检查当前导出设置:右键 ER 图 →
Export ER Diagram→ 格式选SVG→ 确认未勾选Embed fonts(该选项在 Navicat 中实际无效,勾了也白勾) - 临时验证法:把表名、字段注释全改成英文再导出 SVG,若文字正常,基本锁定为字体缺失问题
- Windows 用户需确保
simsun.ttc或msyh.ttc已安装且未被禁用;macOS 用户必须将NotoSansCJK.ttc拖入「字体册」并设为“已启用”,不能仅用户启用 - 导出前务必执行
Layout → Organize Diagram,否则 SVG 中文字位置可能错乱,进一步加剧渲染失败
PDF 导出正常但 SVG 乱码,说明不是数据库层问题
如果 PDF 能正确显示中文,说明连接层字符集(SET NAMES utf8mb4)、数据库元数据编码、Navicat 全局字体设置都已生效。SVG 乱码纯属导出引擎限制——它不读取 Navicat 的「Use system font for labels」设置,也不调用 Qt 的字体匹配逻辑,而是硬编码字体 fallback 行为。
- 不要依赖「工具 → 选项 → 常规 → 默认字符集」,该设置对 SVG 导出无影响
- 避免使用带空格或中文路径保存 SVG 文件,某些旧版 Qt 渲染器会因路径 decode 失败而跳过字体加载
- 导出后用浏览器打开 SVG,按
F12查看控制台是否有Failed to load font报错,有则证实字体链断裂
用 Inkscape 手动修复 SVG 文字(应急方案)
Navicat 导出的 SVG 是标准格式,只是 <text> 元素里用了不支持的 font-family。你可以用文本编辑器或 Inkscape 快速替换,无需重绘。
- 用 VS Code 打开 SVG 文件,全局搜索
font-family="[^"]*",替换成font-family="SimSun, Microsoft YaHei, sans-serif" - 更稳妥做法:用 Inkscape 打开 →
编辑 → 首选项 → 输入/输出 → SVG 导入选项 → 勾选“始终嵌入字体”→ 再另存为新 SVG - 注意:Inkscape 会将文字转为路径(
<path>),失去可编辑性,仅适合最终交付,不适合后续修改


















