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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:35:27