必须手动选“UTF-8 with BOM”而非“UTF-8”,因Navicat默认导出无BOM的UTF-8,而Excel/Numbers依赖EF BB BF字节头识别编码;同时须勾选“Enclose fields in double quotes”防字段错位,二者缺一不可。
导出向导里必须手动选“UTF-8 with BOM”,不能只选“UTF-8”
navicat 默认导出编码是 utf-8(即无 bom),但 windows excel 和 macos numbers 都依赖文件开头的 ef bb bf 字节来识别 utf-8。不带 bom 的文件,excel 会当成 ansi(如 gbk)解析,中文立刻变 ??? 或方块。
操作路径:导出向导 → 格式选 CSV → 点「高级」→ 找到「编码」下拉菜单 → 必须选 UTF-8 with BOM(部分旧版显示为 UTF-8-BOM)。
常见错误:
- 误点
UTF-8(它和UTF-8 without BOM是同一个选项) - 版本太老(v15.0.30 之前)菜单里压根没有该选项,需升级到 v17.0+
- 以为连接层字符集(如
character_set_client)会影响导出,其实完全无关
怎么验证导出文件真有 BOM?别信界面提示
Navicat 界面显示“已选 UTF-8 with BOM”,不代表文件真写了 BOM。Windows 记事本、Mac 预览都看不到字节头,得用命令行确认。
在终端或 PowerShell 中执行:
hexdump -C your_file.csv | head -n 1
如果输出首行是:
00000000 ef bb bf ...
说明 BOM 存在;如果是:
00000000 e6 9d ad ...
(即中文“杭”的 UTF-8 起始字节),说明仍是无 BOM 的纯 UTF-8,打开必乱码。
注意:Mac 上 file -i your_file.csv 不可靠,它常把无 BOM 的 UTF-8 误报为 utf-8,实际解码失败。
勾选“Enclose fields in double quotes”才能防字段错位
BOM 解决乱码,但不解决字段劈开问题。只要数据含逗号(如地址“杭州市,西湖区”)、换行或双引号,CSV 就会结构错乱。
必须在「高级」选项卡中:
- 勾选
Enclose fields in double quotes - 确认
Text qualifier是"(英文双引号) -
Field separator保持,即可,不必改成\t或|
否则即使 BOM 正确,Excel 里某行突然多出三列、内容全错位,就是这个原因。
导出后 Excel 还是删前导零?那是导入方式错了
导出本身没问题,但双击直接打开 CSV 时,Excel 会自动把“00123”当数字转成 123。这不是编码问题,是 Excel 的默认行为。
正确做法是:
- 在 Excel 中点击「数据」→「从文本/CSV」→ 选择该文件
- 在导入预览界面,手动把对应列的列类型设为
文本 - 再点加载
如果必须双击打开,唯一补救是导出前把数字字段转字符串:SELECT CONCAT('', id) AS id FROM table,或用 LPAD(id, 5, '0') 补零。
真正容易被忽略的是:BOM 和双引号必须同时生效,缺一不可——一个管解码,一个管结构,两者独立且都关键。











