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

LOAD DATA LOCAL INFILE导入百万数据时双引号残留及记录丢失问题

问题原因排查

问题1:导入成功但字段保留双引号

  • 核心原因:你在SQL中使用的ENCLOSED BY '"'是HTML转义后的双引号实体,MySQL无法识别该字符作为字段包裹符,因此不会自动剥离字段两端的源文件双引号,最终导致内容原样存储。
  • 次要影响:首次SQL中指定的行终止符为\r,仅适配旧MacOS格式的文本,与多数场景下的文本行尾格式不匹配,但因为包裹符不生效未触发字段错位,所以全部记录可导入。

问题2:双引号正常去除但仅导入一半记录

  • 核心原因:你的源TXT文件为Windows平台生成,行尾采用\r\n(回车+换行)双字符作为终止符,调整后仅指定\n作为行终止符,会将上一行行尾的\r残留到当前行的字段头部,触发字段错位。
  • 触发失败的约束:你创建的temp_data表中AZ_Code字段设置了NOT NULL约束,字段错位后该字段为空的行会被直接判定为非法,导入失败,最终仅约一半符合字段匹配规则的记录能成功导入。
  • 补充说明:调整后双引号可正常去除,说明你实际执行的SQL中ENCLOSED BY已经改为了正确的双引号字符,包裹符逻辑生效。
解决方法

直接使用以下调整后的导入语句即可:

SET NAMES latin1;
LOAD DATA LOCAL INFILE 'Base.txt' 
INTO TABLE temp_data 
CHARACTER SET latin1 
FIELDS TERMINATED BY '\t' 
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES;

调整点说明:

  • 将行终止符改为\r\n,完全适配Windows格式的源文件,避免字段错位
  • 使用OPTIONALLY ENCLOSED BY '"'替代原有配置,兼容部分字段无包裹双引号的场景
  • 确认INFILE后的文件路径正确,避免多余空格导致找不到文件

可选优化建议:

  • 若导入仍有失败,可在执行导入语句后立即执行SHOW WARNINGS,查看具体的失败行号和错误原因,针对性处理异常数据
  • 若源文件存在latin1不支持的特殊字符,可将表字段的字符集统一修改为utf8mb4,避免乱码
  • 导入前可临时关闭SQL严格模式,减少非核心约束导致的导入失败:SET sql_mode = '';

内容的提问来源于stack exchange,提问作者TSCAmerica.com

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:57:03