使用LOAD DATA INFILE导入CSV到MySQL无报错但0行上传问题求助
MySQL LOAD DATA INFILE 导入0行无报错排查方案
最高频问题排查(按优先级排序)
- 换行符匹配错误
你当前语句使用LINES TERMINATED BY '\n',如果CSV是Windows系统生成/导出的,默认换行符为\r\n,换行符匹配失败会导致MySQL将整个文件识别为单行,超出行长度限制后直接静默跳过。直接修改换行符参数为LINES TERMINATED BY '\r\n'重试即可,部分macOS生成的CSV还可能用到\r作为换行符,也可以同步测试。 - 文件读取权限/路径错误
LOAD DATA INFILE默认读取的是MySQL服务端本地的文件,你需要确认填写的文件路径是服务端的绝对路径,且MySQL运行用户对该文件有可读权限。如果你要导入的是客户端本地的CSV文件,需要将语句开头改为LOAD DATA LOCAL INFILE,同时确认MySQL服务端已开启local_infile配置。 - 转义符配置冲突
你当前语句同时配置了OPTIONALLY ENCLOSED BY '"'和ESCAPED BY '"',包裹符和转义符一致会导致CSV中的引号解析逻辑完全错乱,所有行都会因为格式不符合要求被静默跳过。直接删除ESCAPED BY '"'这行配置即可,MySQL默认使用反斜杠\作为转义符,符合绝大多数CSV的格式规范。 - 字段映射不匹配
如果users表的字段顺序、字段数量和CSV的12列不完全对应,哪怕你提前删除了自增列,也需要在语句末尾明确指定对应字段列表,示例:LOAD DATA INFILE "full_path_to_csv_file.filename.csv" INTO TABLE users COLUMNS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (col1, col2, col3, ..., col12); -- 按CSV列顺序填写表对应字段名
精准定位问题方法
- 查看执行警告
执行完LOAD DATA语句后立刻运行SHOW WARNINGS;,MySQL仅会对致命错误抛出报错,行跳过、字段类型不匹配、值溢出等问题都会记录为警告,从警告信息可以直接定位具体失败原因。 - 最小粒度测试
从CSV中提取1行有效数据,单独生成测试文件导入,如果仍然导入失败,直接将该行数据拼接为INSERT语句手动执行,排查是否存在唯一键冲突、字段类型不兼容、外键约束、非空约束未配置默认值等问题。 - 临时表校验
创建一个无任何约束的临时表做导入测试:
如果临时表可以正常导入数据,说明问题出在原CREATE TEMPORARY TABLE test_csv ( col1 varchar(255), col2 varchar(255), -- 按CSV列数创建12个varchar字段 col12 varchar(255) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;users表的约束、字段类型配置上;如果临时表也无法导入,说明是文件格式或LOAD DATA语句参数的问题。
内容的提问来源于stack exchange,提问作者charco
相关产品推荐
相关产品推荐

