Navicat导出CSV中文乱码的根源是默认UTF-8(无BOM)编码与Excel等工具不识别UTF-8 BOM导致解码错误,必须在导出向导中手动选择“UTF-8 with BOM”并用hexdump验证EF BB BF字节头存在。

直接选“UTF-8 with BOM”再导出,比事后补救快得多。Navicat 导出 CSV 时默认用 UTF-8(无 BOM),而 Excel(尤其 Windows 版)不认这个,默认按系统 ANSI(GBK)解码,字节一错位,“测试”就变成“æµè¯”。
导出时必须手动选 UTF-8 with BOM
Navicat 的导出向导里,“编码”下拉框默认值不是可靠依据,必须手动点开并选中 UTF-8 with BOM(部分老版本显示为 UTF-8-BOM):
- 不选
UTF-8:它等价于无 BOM,Excel 双击打开必乱 - 不选
Unicode或留空:实际对应 Windows-1252 或系统 locale,在中文环境基本全乱 - v15.0.30 之前版本可能没有该选项 → 建议升级到 v17.0+
导出后怎么确认 BOM 真的存在
别信界面提示或文件名,直接看字节。在终端执行:
hexdump -C your_file.csv | head -n 1
如果输出首行是 00000000 ef bb bf,说明 BOM 正确写入;如果是 e6 9d ad(“杭”的 UTF-8 起始字节),说明仍是无 BOM 格式,Excel 打开一定乱。
- 没 BOM 但又不能重导?可用命令补:
sed '1s/^/\xef\xbb\xbf/' your_file.csv > fixed.csv - 若原文件含
\r\n,先转\n再加 BOM,否则某些工具会把\r当内容解析 - 别用 macOS TextEdit 打开再另存——它大概率存成 UTF-16 或 Mac OS Roman,更糟
必须导 CSV 时,绕过双击、改用 Excel 导入向导
即使你导出了带 BOM 的 CSV,也建议别双击打开。Excel 的“从文本/CSV”入口才是可控路径:
- 打开空白 Excel → 【数据】→ 【从文本/CSV】→ 选文件 → 【导入】
- 预览页右下角点开【文件原始格式】→ 必须手动选
65001: Unicode (UTF-8)(不是“自动检测”) - 确认预览区中文正常 → 【加载】
这个流程完全跳过了系统默认编码协商,且能正确处理含逗号、换行的字段(比如“杭州市,西湖区”)。
真正容易被忽略的点:连接层编码和导出编码是两回事
很多人调了半天连接属性里的 character_set_client 或 Encoding 设置,但导出 CSV 时 Navicat 完全不读这些配置。导出动作走的是独立编码开关,和查询结果在 Navicat 界面里是否显示正常无关。也就是说:界面看着对 ≠ 导出文件编码对。每次导出前,都得回到导出向导里亲手点一次 UTF-8 with BOM。











