不能。LOAD DATA INFILE仅支持纯文本格式(如CSV、TSV),无法解析Excel的二进制结构(.xls/.xlsx),直接使用会因文件头不识别而报错。

LOAD DATA INFILE 能直接读 Excel 文件吗?
不能。LOAD DATA INFILE 只接受纯文本格式,比如 CSV、TSV。它完全不认识 .xls 或 .xlsx 二进制结构。试图传入 Excel 文件路径会报错:ERROR 13 (HY000): Can't get stat of '/path/to/file.xlsx' (Errcode: 2) —— 不是权限问题,是根本无法解析文件头。
导出 CSV 时最容易被忽略的三个细节
Excel「另存为 CSV」看着简单,但导出质量直接决定后续入库成败:
- 编码必须选
UTF-8(不是 UTF-8 with BOM),否则中文字段入库后变成乱码或截断 - 手动删掉所有空行、合并单元格、页脚汇总行;
LOAD DATA INFILE遇到空行会提前终止,或把空行当数据插入 - 含逗号、换行、双引号的字段(如地址
"Beijing, Chaoyang")必须被双引号包裹,且 Excel 导出时要勾选「将文本限定符设为双引号」,否则FIELDS TERMINATED BY ','会误切字段
secure_file_priv 是什么?为什么总提示“File not found”
secure_file_priv 是 MySQL 的安全限制参数,它强制 LOAD DATA INFILE 只能读取指定目录下的文件(比如 /var/lib/mysql-files/)。你本地桌面路径 C:\Users\Me\Desktop\data.csv 或 /Users/me/Downloads/data.csv 永远无效。
查当前允许路径:
SHOW VARIABLES LIKE 'secure_file_priv';
解决办法只有两个:
- 把 CSV 文件复制到该目录下(Linux/macOS 用
sudo cp,Windows 注意服务账户有读权限) - 临时关闭限制(仅开发环境):在
my.cnf中加secure_file_priv = "",然后重启 MySQL(生产环境严禁)
字段顺序不匹配、类型转换失败怎么办
LOAD DATA INFILE 不自动识别表头,也不做类型推断。它按物理列顺序硬绑定到表字段顺序。常见现象:
- 第一行被当数据插进去 → 加
IGNORE 1 ROWS - 日期字段写成
2025-03-15却报Incorrect date value→ 确保 Excel 导出时日期列是纯文本格式,或在 SQL 中用STR_TO_DATE(@col3, '%Y-%m-%d')转换 - 数字列含空格或「-」导致转成 0 → 先在 Excel 里用
=TRIM(SUBSTITUTE(A1,"-",""))清洗,再导出 - 字段数比表列少 → 用
SET col4 = DEFAULT显式赋默认值,或补全 CSV 列
最稳的做法:导出前在 Excel 里用「数据 → 删除重复项」「开始 → 查找替换 → 替换所有不可见字符」过一遍,再执行导入。跳过清洗环节,90% 的失败都发生在这里。


















