Navicat在Ubuntu下中文乱码需同时满足四条件:LANG=zh_CN.UTF-8、安装fonts-wqy-microhei并fc-cache -fv刷新、GUI/编辑器/记录三处字体设为Noto Sans CJK系列、数据库连接启用UTF-8或SET NAMES utf8mb4。
navicat 在 ubuntu 下无法显示中文,不是它“不支持中文”,而是它完全依赖系统级配置:字体 + locale + java 渲染路径三者缺一不可。只要其中任一环没对上,就会出现菜单是方块、字段名是问号、sql 编辑器打字正常但打开文件就乱码等混合现象。
LANG 环境变量未设为 zh_CN.UTF-8
Java 应用(Navicat 基于 JRE)启动时若检测到 LANG=C 或 LANG=en_US.UTF-8,会跳过中文字体匹配逻辑,直接 fallback 到无中文字形的 DejaVu Sans —— 这就是界面全变方块的根源。
- 临时验证:
LANG=zh_CN.UTF-8 ./start_navicat,如果此时中文立刻正常,说明就是这个原因 - 永久修复:编辑
~/.bashrc或~/.profile,追加export LANG=zh_CN.UTF-8(注意必须是大写UTF-8,小写utf8无效) - 别改
/etc/default/locale:Navicat 启动脚本通常不读这个,只认用户 shell 的环境变量
系统缺少可用的中文字体或缓存未刷新
Navicat 不自带字体,所有中文渲染都靠 fc-list 能查到的系统字体。装了字体但没进缓存,或字体目录放错位置,Java 就找不到字形。
- 先检查:
fc-list :lang=zh,无输出 = 没字体;有输出但全是AR PL UMing CN这类旧字体 = 可能高 DPI 下发虚或缺字 - Ubuntu/Debian 推荐装:
sudo apt install -y fonts-wqy-microhei(22.04+ 默认不带wqy-zenhei) - CentOS/RHEL 必须把 .ttf 文件放进
/usr/share/fonts/truetype/wqy/,再执行sudo fc-cache -fv(-fv不可省,只-f不重建完整缓存)
Navicat 内部字体设置未覆盖全部模块
“常规”页的 GUI 字体只管菜单和对话框;“编辑器”页控制 SQL 编辑区;“记录”页管数据表格网格。三者字体不统一,就会出现菜单正常、编辑器乱码、查出来的数据仍是方块的割裂现象。
- 推荐组合(实测兼容性好):
– 常规 →Noto Sans Mono CJK TC Regular
– 编辑器 →Noto Sans CJK SC Regular
– 记录 →Noto Sans Mono CJK TC Regular - 改完必须重启 Navicat:这些设置在 JVM 启动时加载,运行中修改不生效
- 别选
AR PL UKai或AR PL UMing:在 HiDPI 屏幕上易模糊,且部分汉字(如“镕”“䶮”)缺失
连接层字符集未声明为 utf8mb4
界面字体和 locale 都对了,但查询结果里中文还是 ???,问题就出在连接建立那一刻 —— Navicat 默认用 latin1 告诉 MySQL “我发来的都是 latin1”,MySQL 就真按 latin1 解码,结果自然错位。
- 右键连接 → 编辑连接 → 高级 → 勾选“使用自定义字符集”,选
UTF-8(不是 auto) - 更可靠做法:在“初始化命令”里填
SET NAMES utf8mb4;(注意是utf8mb4,不是utf8) - 验证是否生效:
SELECT @@character_set_client, @@character_set_connection, @@character_set_results;,三项都应返回utf8mb4
最容易被忽略的是:这四个环节(LANG、字体缓存、三处字体设置、连接初始化命令)必须全部到位,少一个都可能让中文在某个环节断掉。尤其是 fc-cache -fv 和 SET NAMES utf8mb4,文档里常被简写成“刷新缓存”“设编码”,但参数和拼写差一点,Navicat 就静默失败,不报错也不提示。


















