MySQL为什么不从CSV文件插入行?我一直在使用LOAD DATA INFILE错误?

时间:2018-10-12 13:20:26

标签: mysql csv mysql-loadfile

我有一个包含以下行的CSV文件:

2,1,abc123,1,2,"Hello World"
2,1,abc123,1,2,"Hello World2"
2,1,abc123,1,2,"Hello World3"

我正在运行以下查询:

LOAD DATA LOCAL INFILE :path INTO TABLE errors
CHARACTER SET 'utf8'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\'
LINES TERMINATED BY '\n'
(import_id, type, code, row, cell, message);

它不会将我的任何行插入数据库。 这是错误表的结构:

+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| id        | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| import_id | int(10) unsigned | NO   | MUL | NULL    |                |
| type      | int(10) unsigned | NO   |     | NULL    |                |
| code      | varchar(128)     | YES  |     | NULL    |                |
| row       | int(10) unsigned | YES  |     | NULL    |                |
| cell      | varchar(32)      | YES  |     | NULL    |                |
| message   | varchar(128)     | YES  |     | NULL    |                |
+-----------+------------------+------+-----+---------+----------------+

我注意到,如果我更改列的顺序,那么它会起作用。

例如,在我的CSV文件中

1,abc123,1,2,"Hello World",2
1,abc123,1,2,"Hello World2",2
1,abc123,1,2,"Hello World3",2

还更改了查询:

LOAD DATA LOCAL INFILE :path INTO TABLE errors
CHARACTER SET 'utf8'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\'
LINES TERMINATED BY '\n'
(type, code, row, cell, message, import_id);

为什么对列使用不同的顺序?

1 个答案:

答案 0 :(得分:1)

请验证您的mysql版本,以及您使用的工具是否启用了此选项(在本地将数据加载到文件中),以及是否在服务器端启用了该选项。它被视为安全隐患,默认情况下,较新版本的mysql服务器已将其禁用。

以下是有关使用本地加载文件MYSQL OFFICIAL DOCS

的安全问题的详细信息

还请注意,您可能需要local_infile = 1,并且可以使用以下命令进行检查:

SHOW GLOBAL VARIABLES LIKE 'local_infile';

要启用它,请使用以下命令:

SET GLOBAL local_infile = 1;

还要验证行是否以'\ n'而不是'\ r \ n'终止(这适用于Windows环境)

希望有帮助!