You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL加载含JSON列的CSV文件报ERROR 3140的问题求助

排查LOAD DATA导入JSON字段的报错问题

我来帮你拆解这个问题的根源,其实核心差异在于LOAD DATA和INSERT语句对转义字符的处理逻辑完全不同:

为什么INSERT能正常工作?

当你用INSERT执行插入时,SQL语句里的"{\"Key1\": 100,\"key2\": \"Abc\"}"中,\"是给SQL解析器看的转义符——MySQL会把它转换成实际的双引号",最终写入JSON字段的内容是标准合法的{"Key1": 100,"key2": "Abc"},自然能通过JSON格式校验。

为什么LOAD DATA会触发JSON错误?

你的LOAD DATA语句用了optionally enclosed by '"',这个参数会让MySQL自动处理双引号包裹内容里的转义字符:CSV文件里的\"会被直接转换成",而不是保留转义结构。这样一来,jfield1字段实际被解析成了:

{Key1: 100,key2: "Abc"}

这显然不符合JSON规范——JSON要求所有键名必须用双引号包裹,所以MySQL直接抛出了Invalid JSON text的错误。

两种可行的解决方案

方案1:修改CSV文件,移除JSON字符串的转义

把CSV里的"{\"Key1\": 100,\"key2\": \"Abc\"}"改成{"Key1": 100,"key2": "Abc"}(去掉所有转义的反斜杠),修改后的CSV内容如下:

id,name,jfield1,jfield2
1,"A","{"Key1": 100,"key2": "Abc"}","{}"
2,"B","{"Key1": 101,"key2": "Def"}","{}"

之后再执行原来的LOAD DATA语句就能正常导入了,因为此时MySQL解析双引号内的内容时,会直接得到合法的JSON格式。

方案2:修改LOAD DATA语句,指定转义字符规则

如果不想修改CSV文件,可以在LOAD DATA语句中添加escape by '\\'(注意这里需要双重转义,因为SQL里的反斜杠本身需要转义),让MySQL保留CSV里的转义逻辑。修改后的语句如下:

load data local infile "/home/user/sample.csv" 
into table test 
fields terminated by ',' 
optionally enclosed by '"'
escape by '\\'
lines terminated by '\n';

这个参数会告诉MySQL:CSV中的反斜杠是转义字符,需要保留它的转义作用。这样jfield1字段的内容会被正确解析为{"Key1": 100,"key2": "Abc"},顺利通过JSON格式校验。

你可以根据自己的实际场景选择其中一种方案,两种方式都能解决这个报错问题。

内容的提问来源于stack exchange,提问作者learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:16:18