Navicat导出SQL文件必须勾选“导出为UTF-8编码”,该选项位于导出向导「格式」页底部,控制文件写入磁盘的字节编码;不勾选则按系统locale(如Windows中文版默认GBK)保存致乱码,勾选后仍乱码需同步修正表结构中DEFAULT CHARSET=utf8等声明。
导出时必须勾选“导出为 UTF-8 编码”
navicat 导出 sql 文件时,“编码”下拉框不是默认开启的,必须主动勾选才能生效。这个选项藏在导出向导的「格式」页底部,名称是「导出为 utf-8 编码」——它控制的是文件写入磁盘时用的字节编码,和连接层字符集无关。
- 不勾选 → 文件按系统 locale(Windows 中文版常为 GBK)保存,中文变乱码或问号
- 勾选后仍乱码 → 说明文件内容本身含
DEFAULT CHARSET=utf8或COLLATE=utf8_general_ci,需同步修正表结构 - 别选「UTF-8 with BOM」除非你要双击用 Excel 打开;VS Code / Notepad++ 默认识别无 BOM 的 UTF-8
导入时手动指定编码为 UTF-8(不是自动检测)
Navicat 的「运行 SQL 文件」功能默认用编辑器当前默认编码打开文件,不是自动识别真实编码。哪怕你用 VS Code 保存为 UTF-8 无 BOM,它也可能误判成 GBK,导致执行时报 Incorrect string value。
- 右键数据库 →「运行 SQL 文件」→ 选中文件后,点右上角「编码」按钮
- 明确选
UTF-8,不要选「自动检测」或留空 - 如果文件由 Windows 记事本保存,则选
UTF-8 with BOM;其他编辑器(VS Code、Sublime、IntelliJ)保存的默认选UTF-8 - 导入失败后清缓存:
%AppData%\PremiumSoft\Navicat\Cache目录删掉再重试
编辑器里打开已有 .sql 文件总乱码?改默认编码设置
新建查询窗口打中文正常,但打开本地 .sql 文件全是方块或问号,说明 Navicat 加载文件时猜错了编码。它默认按系统 locale 推测,Windows 中文版常把 UTF-8 无 BOM 文件当成 GBK。
- 菜单栏 →「工具」→「选项」→「常规」→「默认编码」改成
UTF-8 - 务必勾选「新建查询时使用默认编码」,否则新建窗口也不生效
- 已打开的乱码文件:右键标签 →「重新以编码打开…」→ 试选
UTF-8或GBK(用 VS Code 先确认真实编码) - 永久生效前,先用
file -i your.sql(macOS/Linux)或xxd your.sql | head -1看头三字节是否为ef bb bf(BOM 标识)
为什么选了 UTF-8 还乱码?检查三处隐性字符集冲突
文件编码只是第一关。即使导出/导入都设对了 UTF-8,执行时仍可能乱码,因为 Navicat 没把「文件编码」「连接声明编码」「服务端存储编码」对齐。
- 连接层必须设
utf8mb4:编辑连接 →「高级」→ 勾选「使用自定义字符集」→ 手动输utf8mb4(别信下拉菜单) - 加初始化命令:
SET NAMES utf8mb4;写进「高级」→「初始化命令」栏(不是utf8) - 查服务端实际字符集:
SHOW VARIABLES LIKE 'character_set_server';,如果不是utf8mb4,建库语句要手补CHARACTER SET = utf8mb4 - 导出的 SQL 里若还有
DEFAULT CHARSET=utf8,说明源表没改过字符集,得先ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4;











