Navicat在Debian下中文显示方块或乱码,根本原因是编辑器字体配置、系统字体链、连接层编码三者未对齐;需同步设置支持中文的monospace编辑器字体(如WenQuanYi Zen Hei Mono)、连接初始化命令SET NAMES utf8mb4、默认文件编码为UTF-8,并重启Navicat生效。

Debian下Navicat中文显示为方块或乱码,不是字体没装全,而是编辑器字体配置、系统字体链、连接层编码三者没对齐。只改其中一项,重启十次也没用。
编辑器字体必须显式设为支持中文的等宽字体
Navicat 编辑器强制要求 monospace 字体,且不会 fallback 到中文字体——它静默回退到 DejaVu Sans Mono,而该字体不含汉字字形,结果就是方块。
- 先安装字体:
sudo apt install fonts-wqy-zenhei fonts-noto-cjk - 打开
工具 → 选项 → 外观 → 字体,找到「编辑器字体」(不是「界面字体」) - 点击「浏览」,在字体列表里手动找带
Mono后缀的:优先选WenQuanYi Zen Hei Mono或Noto Sans Mono CJK SC - 在预览框输入“测试”,确认能清晰显示;若仍为方块,说明字体未生效或未真正加载
- 改完后必须用菜单
文件 → 退出(不是关窗口),再重新启动 Navicat
连接层必须显式声明 utf8mb4,不能依赖“自动”
Debian 默认 locale 常为 en_US.UTF-8 或 zh_CN.UTF-8,但 Navicat 连接 MySQL 时仍可能协商出 latin1,导致 INSERT/SELECT 中文被截断或转成 ???。
- 右键连接 →
编辑连接 → 高级,在「初始化命令」栏填入:SET NAMES utf8mb4; - 确保「初始字符集」下拉框明确选为
utf8mb4(不是自动,该选项在 Debian 下不可靠) - 连接建立后,立即执行:
SELECT @@character_set_client, @@collation_connection;,确认返回值含utf8mb4 - 若返回
latin1,说明初始化命令未执行——检查是否拼错、是否多空格、是否用了中文分号
SQL 文件打开即乱码?别猜,直接重载编码
Navicat 在 Debian 上默认用 locale 猜测文件编码,对无 BOM 的 UTF-8 文件常误判为 ISO-8859-1,一打开就满屏问号。
- 已打开乱码文件:右键标签页 →
重新以编码打开…→ 试UTF-8和GBK(用file -i your.sql先确认真实编码) - 永久设置:菜单
工具 → 选项 → 常规 → 默认编码改为UTF-8,并勾选「新建查询时使用默认编码」 - 别人发来的 .sql 文件,务必先用
vscode或less查看实际编码,不要凭扩展名或印象选 - 导出 SQL 时,导出向导最后一步必须勾选「导出为 UTF-8 编码」,否则生成的文件带 BOM 或用系统 locale 编码,下次再导入又进坑
最容易被忽略的是:Linux 下字体和连接编码是两套独立系统,改了字体不等于连接就通了,设了 SET NAMES utf8mb4 也不代表编辑器能显示中文——它们必须各自配对成功,缺一不可。


















