我有一个 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);
为什么列的顺序不同?
最佳答案
请验证您的 mysql 版本以及您正在使用的工具是否启用了此选项(在本地文件中加载数据)以及服务器端是否启用了该选项。它被认为是一个安全风险,并且默认情况下被较新版本的 mysql 服务器禁用。
以下是有关利用 load infile local MYSQL OFFICIAL DOCS 的安全问题的更多信息
另请注意,您可能需要 local_infile=1,您可以使用以下命令进行检查:
SHOW GLOBAL VARIABLES LIKE 'local_infile';
要启用它,请使用以下命令:
SET GLOBAL local_infile = 1;
还要验证这些行是否以“\n”而不是“\r\n”终止(这适用于 Windows 环境)
希望有帮助!
关于mysql - 为什么 MySQL 不从 CSV 文件插入行?我一直使用LOAD DATA INFILE 错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52780418/