【问题标题】:Error 1148 (42000) using LOAD DATA LOCAL INFILE in MySQL在 MySQL 中使用 LOAD DATA LOCAL INFILE 时出现错误 1148 (42000)
【发布时间】:2018-09-12 12:49:45
【问题描述】:

我正在尝试使用 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' 终止的行忽略 1 行(C1、C2、C3、C4)

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

感谢您的帮助

编辑

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

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

【问题讨论】:

    标签: mysql mysql-error-1064


    【解决方案1】:

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

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

    希望这会有所帮助。

    【讨论】:

    • mysql -h localhost -uroot -p --local-infile
    • 使用 LINES TERMINATED BY '\r\n' 或 LINES TERMINATED BY '\n'
    • 同样的问题
    • 在使用 mysqlsh 时遇到了同样的问题。但是首先连接 mysql -hostname ... 解决了这个问题。然后你就可以运行你的加载数据命令了。
    【解决方案2】:

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

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

    SET GLOBAL local_infile = 1;
    

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

    SET PERSIST local_infile = 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-05
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多