必须手动配对设置分隔符和文本限定符,Navicat不会自动识别双引号包裹逻辑;分隔符须设为英文逗号,文本限定符须设为英文双引号,二者缺一不可,否则含逗号的字段如"a,b"会被错误拆分。
分隔符和文本限定符必须手动配对设置
navicat 不会自动识别 csv 中的双引号包裹逻辑,哪怕你文件里明明写了 "苹果,香蕉",它也会按逗号直接切开——除非你在导入向导第二步(字段选项页)里显式指定:
- 分隔符设为
,(英文逗号),不能留空或误选;、\t - 文本限定符设为
"(英文双引号),不是中文“”、单引号'或空格 - 勾选
首行包含列名,否则字段映射下拉框里只显示Field 1、Field 2
这两个设置缺一不可。只设分隔符不设限定符,或反过来,都会让 "a,b" 被拆成两列。
字段内含双引号时必须用两个连续双引号转义
CSV 标准规定:字段值本身含双引号,必须写成 ""(两个连续英文双引号)。比如原始内容是 张三说:"你好",正确写法是:"张三说:""你好"""。
Navicat 解析规则是:遇到第一个 " 开始包裹,第二个 " 视为转义,第三个 " 才结束字段。如果写成 "张三说:"你好"",它会在第一个 " 后、好 前那个 " 处截断,后续全乱。
常见错误现象:
- 地址字段
"北京市"朝阳区"→ 导入后只剩北京市,后面全丢 - JSON 字段如
"{"name":"李四"}"→ 必须写成"{""name"":""李四""}"
编码与 BOM 头容易导致引号失效
带 BOM 的 UTF-8 文件(即 UTF-8 with BOM)会让 Navicat 在读取第一行时把 BOM 当作普通字符,导致 " 没被识别为文本限定符,整个引号逻辑跳过。
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
解决方法很简单:
- 用 Notepad++ 或 VS Code 打开 CSV,编码菜单里选
Encode in UTF-8(无 BOM)再保存 - 升级到 Navicat v16.1+,新版对 BOM 兼容性更好,但不如直接去掉 BOM 彻底
- 别依赖“自动探测”,BOM 存在时,即使你设了
"为限定符,也可能静默失效
导出端没关文本限定符,导入时就容易套娃
如果你的 CSV 是 Navicat 自己导出的,检查导出设置里是否勾选了 文本限定符。很多人导出时开着这个选项,又在导入时没配对设置,结果字段变成 """苹果,香蕉""" 这种嵌套结构,解析彻底失败。
更稳妥的做法:
- 导出时勾选
不使用文本限定符(DBeaver 支持;Navicat 需用高级导出或 SQL 脚本) - 前提是确认所有字段都不含逗号、换行、引号——否则宁可保留
"并严格配对导入设置 - 不要一边导出加引号,一边导入又不设限定符,这是最常被忽略的链路断裂点
真正麻烦的不是引号本身,而是导出和导入两端的限定符开关状态不一致。只要一端开了,另一端就必须对齐,否则数据从生成那一刻起就已经埋雷了。










