使用LOAD DATA LOCAL INFILE导入CSV无记录导入问题求助
我来帮你排查这个问题——LOAD DATA没报错但没数据导入,通常是数据不符合表约束或者语句配置有问题,结合你的情况,主要有两个核心问题需要解决:
1. 自增主键id的处理错误
你的CSV中第一列(对应id)是空值,但你在LOAD DATA语句里把id包含在了字段列表中。虽然id是自增列,但CSV中的空字符串会被MySQL尝试转换为int值(通常转为0),而自增主键默认从1开始,0不符合主键唯一性要求;如果你的SQL模式是宽松模式,MySQL不会抛出错误,但会直接丢弃这些不符合约束的行。
解决方法:修改LOAD DATA语句,不要指定id字段,让MySQL自动生成自增值:
LOAD DATA LOCAL INFILE 'data-to-import.csv' INTO TABLE db.t1 COLUMNS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (age,spns,pns,spns2,sns,ps,ss,gid,term,band);
2. Decimal列精度不足,导致数据被截断/丢弃
你的表结构中,spns、pns等字段定义为decimal(4,4)——这个类型表示总共有4位数字,且全部是小数位(整数部分只能为0)。但你的CSV里存在1.083、2.408这样的值,整数部分为1或2,总位数超过了decimal(4,4)的限制,MySQL会因为数据不符合约束而丢弃这些行(宽松模式下不会报错)。
解决方法:修改表结构,扩大decimal字段的总位数,比如改为decimal(5,4)(总位数5,其中4位小数,允许整数部分为0-9):
ALTER TABLE db.t1 MODIFY COLUMN spns decimal(5,4) NOT NULL; ALTER TABLE db.t1 MODIFY COLUMN pns decimal(5,4) NOT NULL; ALTER TABLE db.t1 MODIFY COLUMN spns2 decimal(5,4) NOT NULL; ALTER TABLE db.t1 MODIFY COLUMN sns decimal(5,4) NOT NULL; ALTER TABLE db.t1 MODIFY COLUMN ps decimal(5,4) NOT NULL; ALTER TABLE db.t1 MODIFY COLUMN ss decimal(5,4) NOT NULL;
额外排查步骤
如果上述修改后还是没数据,再检查这两点:
- 确认LOCAL INFILE功能已启用:
执行以下命令查看状态:
如果结果为SHOW VARIABLES LIKE 'local_infile';OFF,需要在MySQL配置文件(my.cnf/my.ini)中添加local_infile=1并重启服务,或者在Workbench连接时添加参数--local-infile=1。 - 查看导入警告:
即使没有报错,也可能有警告提示数据问题,执行:
这能帮你快速定位剩余的约束或格式问题。SHOW WARNINGS;
内容的提问来源于stack exchange,提问作者AnchovyLegend




