解决mysql报错:1406, Data too long for column

最近在往 MySQL 里导入一张 1000 万行的 tb_sku表时,我算是彻底领教了 LOAD DATA这个工具的"脾气"。原本以为这是个能救命的神器,结果差点被它整崩溃。今天就把这次的血泪史总结一下,希望能帮大家避雷。

一、 所谓的"智能解析",其实一点也不智能

首先最大的误区就是:千万别把 LOAD DATA当成智能解析工具。

我一开始天真地以为,CSV 里的 null字符串,MySQL 总会帮我转成 NULL吧?结果现实狠狠打了脸。在 tb_sku表中,status字段是 char(1),但 CSV 里写的是 nullLOAD DATA根本不会做语义判断,它直接把 'n', 'u', 'l', 'l'往字段里塞,直接导致 Data too long for column 'status'的错误。

结论一LOAD DATA只认 \NNULL,其他的 nullNULL统统是字符串。

二、 最隐蔽的坑:字段错位

这是我踩得最深的一个坑。报错永远指向 status字段,让我一度以为是 status的长度不够。但当我用 select * from tb_sku where id=9449\G;查看时才发现,真正的原因是字段错位

因为 CSV 里有些字段(比如 spec)包含了逗号,或者因为 null字符串占用了额外空间,导致整个数据流的列顺序向后偏移。MySQL 并不会告诉你"第 10 列有问题",而是等到最后一列 status发现装不下时,才抛出错误。

这就好比排队,前面的人多占了位置,最后一个人永远是被挤出去的那个。

三、 为什么还在用 LOAD DATA?

既然这么多坑,为什么不全用 INSERT?原因很简单:速度

在导入 1000 万行数据时,LOAD DATA INFILE的速度至少是单条 INSERT的 10 倍以上。对于海量数据迁移,它是唯一现实的选择。它不是不好用,而是它设计的初衷就是"在已知数据完全干净的前提下,提供最高吞吐量的写入"。

四、 血的教训:五个必须的检查步骤

经过这次折腾,我总结了使用 LOAD DATA前必须做的 5 项数据清洗检查,缺一不可:

  1. 检查分隔符是否唯一 :确保数据内容中不包含你使用的分隔符(如 ,|),否则必须用双引号包裹,或者更换分隔符。

  2. 检查列数一致性 :用 awk扫一遍文件,确保所有行的列数都等于表字段数,剔除脏数据。

  3. 规范化 NULL 值 :将所有的 null字符串替换为 \N,或者在 SQL 中使用 NULLIF()函数处理。

  4. 检查字段长度 :特别是 varchar类型的字段,防止超长字符串导致写入失败。

  5. 检查换行符 :如果是 Windows 环境下生成的文件,记得用 dos2unix处理,防止 \r\n引发解析异常。

五、 总结

LOAD DATA是一把双刃剑。它锋利无比,能帮你快速切开海量数据;但它也很笨重,没有任何容错能力。

如果你指望它能像 Excel 一样智能纠错,那你一定会失望。但如果你愿意花几分钟做一次数据清洗,它绝对是 MySQL 生态中最值得信赖的批量导入工具。

我只是测试用的,所以在网上看了一遍文章,直接将它设为宽松模式:

解决mysql报错:1406, Data too long for column(多种方案)-CSDN博客

相关推荐
绘梨衣5472 小时前
Docker+FastAPI+MySQL 项目部署报错汇总
mysql·docker·fastapi
小江的记录本3 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
dvjr cloi3 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dFObBIMmai3 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw03 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
czlczl200209254 小时前
利用“延迟关联”优化 MySQL 巨量数据的深分页查询
数据库·mysql
ACP广源盛139246256734 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
Elastic 中国社区官方博客4 小时前
ES|QL METRICS_INFO 和 TS_INFO:为你的时间序列数据建立目录
大数据·数据库·elasticsearch·搜索引擎·信息可视化·全文检索
俺不要写代码5 小时前
数据库:函数
数据库·mysql