You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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列精度不足,导致数据被截断/丢弃

你的表结构中,spnspns等字段定义为decimal(4,4)——这个类型表示总共有4位数字,且全部是小数位(整数部分只能为0)。但你的CSV里存在1.0832.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

火山引擎 最新活动