MySQL加载CSV时引号内逗号被误拆分,报错1262如何解决?
解决MySQL LOAD DATA时引号内逗号导致的行截断错误
问题分析
你碰到的ERROR 1262是因为第304行数据被错误拆分——虽然指定了FIELDS ENCLOSED BY '"',但该行的多余星号干扰了MySQL对字段引号边界的识别:
- PARCEL字段开头的
* - IN_CARE_OF字段前后的
**和***
这些额外字符让MySQL无法正确判断引号包裹的范围,导致引号内的逗号被误当作字段分隔符,最终拆分出的列数超过表结构列数,触发截断错误。
解决方案
方案1:清洗脏数据后重新加载
直接修改第304行的原始CSV数据,去掉多余星号,修正后的数据应为:
00.000366,"BUNNEY, GARY LEE",40 E TRENT,,SPOKANE,WA,99202,,100.0,"CAROL LUNDY, 1ST AMERICAN"
之后重新执行原LOAD DATA语句即可。
方案2:在LOAD DATA语句中动态清洗字段
如果无法修改原始CSV,可通过用户变量在加载时剔除多余星号,同时强化引号识别逻辑:
LOAD DATA INFILE 'my_taxpayers.csv' INTO TABLE taxpayers FIELDS ENCLOSED BY '"' TERMINATED BY ',' ESCAPED BY '"' -- 明确指定转义符,确保引号内的逗号不被当作分隔符 LINES TERMINATED BY '\n' IGNORE 1 ROWS (@parcel, @taxpayer, @address1, @address2, @city, @state, @zip, @country, @role_pct, @in_care) SET PARCEL = TRIM('*' FROM @parcel), TAXPAYER = @taxpayer, ADDRESS_1 = @address1, ADDRESS_2 = @address2, CITY = @city, STATE = @state, ZIP = @zip, COUNTRY = @country, ROLE_PERCENTAGE = @role_pct, IN_CARE_OF = TRIM('*' FROM @in_care);
关键调整说明:
ESCAPED BY '"':明确告知MySQL用双引号转义自身,避免引号内的逗号被误判- 用户变量
@xxx接收原始字段值,通过TRIM('*' FROM ...)剔除多余星号后再赋值给表字段
方案3:检查行终止符(备选)
若其他行也偶发类似问题,可能是CSV行终止符并非\n(比如Windows生成的CSV用\r\n),可修改行终止符配置:
LINES TERMINATED BY '\r\n'
内容的提问来源于stack exchange,提问作者bobsnyder
相关产品推荐
相关产品推荐

