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

使用LOAD DATA LOCAL INFILE导入数据时遇MySQL 1148(42000)错误求助

解决LOAD DATA LOCAL INFILE的Error 1148及语法问题

看起来你遇到了两个核心问题:SQL语句的语法错误,以及LOCAL INFILE的权限/配置问题导致的Error 1148。咱们一步步来解决:

1. 先修复LOAD DATA语句的语法错误

你的语句里SET cmj = REPLACE(@cmj,',','.');存在问题——你引用了@cmj变量,但在前面的字段列表里没有定义这个变量。要对CSV中的某列做替换后存入表字段,需要先把对应CSV列读取到一个临时变量,再通过SET子句处理赋值。

举个例子:如果cmj是你的目标表字段,且它对应CSV中的第5列,那么修正后的语句应该是:

LOAD DATA LOCAL INFILE '/绝对路径/f.csv'  -- 建议用绝对路径避免相对路径问题
INTO TABLE tableName 
FIELDS TERMINATED BY ';' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES 
(C1, C2, C3, C4, @cmj_raw)  -- 将CSV第5列读入临时变量@cmj_raw
SET cmj = REPLACE(@cmj_raw, ',', '.');  -- 替换后赋值给表的cmj字段

如果cmj对应的是CSV中已有的某个列(比如C4),那你需要调整字段列表,把C4读入变量再处理:

LOAD DATA LOCAL INFILE '/绝对路径/f.csv'
INTO TABLE tableName 
FIELDS TERMINATED BY ';' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES 
(C1, C2, C3, @cmj_raw)
SET C4 = REPLACE(@cmj_raw, ',', '.');

2. 解决Error 1148 (42000) 问题

这个错误的本质是服务器不允许使用LOCAL INFILE命令,即使你修改了my.cnf,可能还有几个环节没配置到位:

步骤1:确认my.cnf配置生效

先重启MySQL服务让配置生效:

sudo service mysql restart

登录MySQL后,执行以下命令检查全局变量:

SHOW GLOBAL VARIABLES LIKE 'local_infile';

如果结果不是ON,说明你的my.cnf配置可能没被正确读取(Ubuntu 14.04的MySQL 5.7通常使用/etc/mysql/mysql.conf.d/mysqld.cnf作为配置文件,你可以确认下路径是否正确)。

步骤2:客户端连接时显式开启local-infile

即使服务器端开了local_infile,客户端连接时也需要显式启用这个选项。登录MySQL时用以下命令:

mysql --local-infile=1 -u 你的用户名 -p

如果是用程序(比如PHP/Python)连接,需要在连接参数中开启LOCAL INFILE支持:

  • PDO示例:new PDO('mysql:host=localhost;dbname=你的数据库', '用户名', '密码', [PDO::MYSQL_ATTR_LOCAL_INFILE => true]);

步骤3:确保用户拥有FILE权限

执行LOAD DATA LOCAL INFILE需要用户具备FILE权限,给你的用户授权:

GRANT FILE ON *.* TO '你的用户名'@'localhost';
FLUSH PRIVILEGES;

步骤4:检查文件权限

确保MySQL客户端(执行命令的用户)能读取f.csv文件,建议使用绝对路径,并且文件权限至少设置为644:

chmod 644 /你的文件路径/f.csv

按以上步骤操作后,应该就能成功执行LOAD DATA语句了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:13:22