双击打开CSV乱码是因为Windows用ANSI(如GBK)解析无BOM的UTF-8文件;唯一可靠方案是Excel“从文本导入”并手动选UTF-8,同时确保Navicat导出时编码、字段分隔符、文本限定符设置正确且数据库连接字符集匹配。
为什么双击打开CSV就是乱码?
因为windows默认用系统ansi编码(如gbk)解析双击打开的csv文件,而navicat导出的utf-8 csv默认不带bom头,excel无法识别它是utf-8——它不是读错了,是根本没“认出”该用什么编码读。
必须用Excel「从文本导入」而不是双击
双击走的是系统默认编码路径,绕不过去;「从文本导入」则允许你手动指定编码,这才是唯一可控的入口。
- 在Excel中:数据 → 从文本/CSV → 选择导出的
.csv文件 - 在导入预览界面,右下角明确选择
UTF-8(不是自动检测,也不是GB2312) - 确认分隔符为
,、文本限定符为",勾选「首行为标题」(如导出时启用了该选项)
Navicat导出设置要同步匹配
如果Excel「从文本导入」里选了UTF-8却还是乱码,大概率是Navicat导出时没真正用UTF-8——它默认可能还在用系统locale(如GBK)。
- 导出向导 → 点「高级」→ 编码必须选
UTF-8(不是UTF-8 with BOM,那个是给双击用的备用方案) - 字段分隔符设为
,,文本限定符设为",否则含逗号或换行的字段会错位 - 时间字段若显示异常(如变成数字或1970年),不要依赖「日期格式」下拉框,改用SQL查询导出:
SELECT DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') AS created_at FROM table_name
容易被忽略的关键点
「从文本导入」能解决问题,但前提是Navicat导出的字节流本身是UTF-8编码。如果你导出时连接字符集是GBK,或者数据库character_set_results是latin1,那导出来的文件哪怕选了UTF-8选项,实际内容仍是乱码字节——Excel再怎么选对编码也救不回来。


















