0

我有一个包含行的 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);

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

4

1 回答 1

1

请验证您的 mysql 版本以及您正在使用的工具是否启用了此选项(在本地加载数据),以及它是否在服务器端启用。它被认为是一种安全风险,并且默认情况下被较新版本的 mysql 服务器禁用。

这是有关使用加载文件本地MYSQL 官方文档的安全问题的更多信息

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

SHOW GLOBAL VARIABLES LIKE 'local_infile';

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

SET GLOBAL local_infile = 1;

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

希望有帮助!

于 2018-10-12T15:12:17.350 回答