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

标签 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);

为什么列的顺序不同?

最佳答案

请验证您的 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/

相关文章:

php - 无法连接到网站中的数据库

mysql - 重命名表中的文件名

c# - 使用 CsvHelper 可以将空格转换为可为 null 吗?

mysql - 通过 mySQL 命令行直接上传图片

mysql - 云 SQL : Python Client API defaults to utf8mb3 character set on CSV file import

MySQL Sum 分组问题

mysql - 如何停止除一个应用程序用户之外的任何应用程序用户的 mysql 表选择查询?

python - 如何解决 : Python import of file with . csv Dictreader 在未定义字符上失败

javascript - 如何将 CSV 数据转换为 JSON 数据?

mysql - LOAD_FILE 返回 NULL