错误1148(42000)在MySQL中使用LOAD DATA LOCAL INFILE

时间:2018-04-03 08:53:08

标签: mysql mysql-error-1064

我正在尝试使用LOAD DATA LOCAL INFILE将数据加载到MySQL表中:

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

操作系统:Ubuntu 14.04

MySQL:5.7

在文件my.cnf中我有这个配置:

[mysqld]
local-infile=1
[mysql]
local-infile=1
[client]
loose-local-infile=1
local-infile=1

我收到以下错误:

  

消息:SQLSTATE [42000]:语法错误或访问冲突:1148   这个MySQL版本不允许使用命令,查询是:LOAD   DATA LOCAL INFILE'f.csv'INTO TABLE tableName FIELDS TERMINATED BY   ';' '\ r \ n'IGNORE 1 LINES(C1,C2,C3,C4)终止的线路

我认为问题与MySQL中的新行有关

感谢您的帮助

修改

在我的file.csv中,我有两行(标题+值)。如果我将我的请求“IGNORE 1 LINES”更新为“IGNORE 0 LINES”,则会插入第一行(标题)。

所有行都被视为一行!!!!!

2 个答案:

答案 0 :(得分:3)

连接数据库时使用 - local-infile

mysql -hhostname -uusername -p --local-infile  test -A

希望这有帮助。

答案 1 :(得分:1)

根据MySQL reference manual v5.7,您收到的错误可能是由于服务器或客户端上的LOCAL文件功能被禁用而导致的。

使用mysql选项运行--local-infile将在客户端启用LOCAL功能,但是如果在由系统变量控制的服务器上禁用了此功能,则无济于事local_infile。解决此问题的最简单方法是在运行时使用SET命令重置系统变量:

SET GLOBAL local_infile = 1;

注意::在更高版本的MySQL中,您可以使用以下命令在服务器重启后使变量更改保持不变

SET PERSIST local_infile = 1;