我有一个包含以下行的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);
为什么对列使用不同的顺序?
答案 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环境)
希望有帮助!