Почему MySQL не вставляет строки из файла CSV?Я неправильно использовал LOAD DATA INFILE? - PullRequest
0 голосов
/ 12 октября 2018

У меня есть 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 голосов
/ 12 октября 2018

Пожалуйста, проверьте версию вашего 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)

Надеюсь, это поможет!

...