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

使用MySQL LOAD DATA INFILE仅导入半数记录的问题求助

MySQL LOAD DATA导入CSV仅部分/无数据写入的解决方案(无需修改源文件)

先定位问题根源

首先需要明确CSV文件实际的换行符类型,不同系统生成的CSV换行符可能不一致(Unix/Linux用\n,Windows用\r\n,旧Mac用\r),甚至可能存在混合换行符的情况。

  • 用hexdump工具查看CSV文件的换行符十六进制:
    head -20 /x.csv | hexdump -C
    
    查看输出中的换行标识:
    • 0a 对应 \n
    • 0d 0a 对应 \r\n
    • 0d 对应 \r

针对性调整LOAD DATA参数

根据检测到的换行符,修改LINES TERMINATED BY参数:

情况1:检测到混合换行符或\r

如果文件里同时存在\n和\r,或者单独是\r,尝试用'\r'作为行终止符:

LOAD DATA LOCAL INFILE '/x.csv'
INTO TABLE Addresses
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r'
IGNORE 1 ROWS;

情况2:编码不匹配导致换行符识别错误

CSV文件的编码(比如UTF-8带BOM、GBK等)可能干扰MySQL对换行符的识别,添加CHARACTER SET参数指定文件编码:

LOAD DATA LOCAL INFILE '/x.csv'
INTO TABLE Addresses
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

(如果文件是GBK编码,替换为CHARACTER SET gbk)

排查数据截断/跳过的具体原因

即使命令执行无报错,也可能存在警告信息,导入后执行:

SHOW WARNINGS;

警告会明确显示问题,比如:

  • 字段类型不匹配导致数据截断
  • 行终止符识别错误导致列数不匹配
  • 引号转义错误导致行拆分异常

替代方案:使用mysqlimport工具

如果LOAD DATA命令仍有问题,尝试用mysqlimport工具(本质和LOAD DATA一致,但参数格式更灵活):

mysqlimport --local \
  --fields-terminated-by=',' \
  --fields-optionally-enclosed-by='"' \
  --fields-escaped-by='"' \
  --lines-terminated-by='\n' \
  --ignore-lines=1 \
  你的数据库名 /x.csv

根据之前检测的换行符,替换--lines-terminated-by的值为'\r'或'\r\n'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:57:28