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

LOAD DATA导入CSV时文本字段逗号保留数值字段被截断原因

问题原因及解决方案

核心原因

这个差异是CSV字段拆分规则和MySQL不同字段类型的解析逻辑共同导致的:

  • 你使用的导入语句指定了FIELDS TERMINATED BY ',',同时开启了OPTIONALLY ENCLOSED BY '"',只有被双引号包裹的内容里的逗号才会被识别为字段值的一部分,不会作为字段分隔符拆分。
  • 文本字段和数值字段对写入内容的格式要求完全不同。

文本字段逗号可正常保留的原因

你提到的取值为D,i,Y的文本字段,在原始CSV文件中是被双引号包裹的,比如对应CSV行的内容为..."D,i,Y",...。
MySQL拆分字段时识别到双引号包裹标识,不会将内容内部的逗号作为分隔符拆分,完整的D,i,Y字符串会直接写入文本类型字段,自然不会出现内容丢失。

数值字段逗号触发截断的原因

两种场景都会导致你碰到的截断问题:

  1. 原始CSV中1,234没有被双引号包裹:MySQL拆分字段时碰到1后的逗号,直接将其判定为字段边界,只把1赋值给对应数值字段,后面的234会被分配给下一个字段。
  2. 原始CSV中1,234已经被双引号包裹:MySQL的数值类型(INT、DECIMAL等)无法识别带千分位逗号的字符串格式,解析时会从第一个非数值字符(也就是逗号)位置直接截断,只保留前面的1。

修复方案

  • 方案一:导出CSV时给所有数值字段统一加上双引号包裹,导入时先将对应字段临时设置为文本类型,导入完成后执行SQL去掉千分位逗号再转为数值类型,参考语句:
UPDATE social_spend SET 数值字段名 = REPLACE(数值字段名, ',', '') + 0;
  • 方案二:导出CSV前提前清理数值字段的千分位逗号,导出为纯数字格式后再导入MySQL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:51:02