Я не могу загрузить таблицу MySQL, содержащую только целочисленные столбцы из файла

Я пытаюсь импортировать данные в таблицу MySQL.

Стол:

CREATE TABLE `MYTABLE` (
  `F1` bigint(20) NOT NULL,
  `F2` bigint(20) NOT NULL,
  `F3` int(11) NOT NULL,
  `F4` bigint(20) DEFAULT NULL,
  `F5` tinyint(4) NOT NULL,
  `F6` bigint(20) NOT NULL,
  `F7` bigint(20) NOT NULL,
  PRIMARY KEY (`F1`)
) ENGINE=InnoDB default charset=latin1;

Файл данных содержит записи этой формы, которые разделены вкладкой:

229733561174    44224449355443  0   0   0   55555557555000  12345678901

Команда импорта:

mysql> load data infile 'try.txt' INTO TABLE MYTABLE;

Предупреждения, которые я получаю:

+---------+------+-------------------------------------------------------------
--------------------------+
| Level   | Code | Message
                          |
+---------+------+-------------------------------------------------------------
--------------------------+
| Warning | 1366 | Incorrect integer value: '229733561174' for column 'F1'
at row 1                  |
| Warning | 1366 | Incorrect integer value: '44224449355443' for column 'F2'
 at row 1                 |
| Warning | 1366 | Incorrect integer value: '0  0       0       55555557555000
12345678901' for column 'F3' at row 1 |
| Warning | 1261 | Row 1 doesn't contain data for all columns
                          |
| Warning | 1261 | Row 1 doesn't contain data for all columns
                          |
| Warning | 1261 | Row 1 doesn't contain data for all columns
                          |
| Warning | 1261 | Row 1 doesn't contain data for all columns
                          |
+---------+------+-------------------------------------------------------------
--------------------------+
7 rows in set (0.00 sec)

Я не могу понять, почему значения первых двух столбцов Incorrect integer value и почему значения столбцов 3-7 все рассматриваются как один столбец.

Я попытался изменить разделитель полей на ',' (указав его в команде загрузки данных), и все равно получил те же предупреждения.

Выходная таблица содержит 0 во всех столбцах (кроме необязательного столбца, который получает NULL).

Может кто-нибудь сказать, пожалуйста, что я делаю не так?

2 ответа

Решение

Я нашел проблему. Набор символов по умолчанию в моей БД был ucs2, что вызвало проблему. Если я укажу другой набор символов в load data infile команда, все работает:

load data infile 'try.txt' ignore 
into table MYTABLE
character set latin1
fields terminated by '\t' enclosed by '' escaped by '\\'
lines terminated by '\n' starting by ''
ignore 1 lines;

Эта ошибка означает, что данные на самом деле не разделены табуляцией:

| Warning | 1366 | Incorrect integer value: '0  0       0       55555557555000
12345678901' for column 'F3' at row 1 |

Возможно, первые два разделителя являются символами табуляции, а остальные - переменным числом пробелов.

Я рекомендую вам проверить и стандартизировать способ разделения полей.

Также хорошей практикой является явное объявление разделителя в LOAD DATA INFILE команда, а не полагаться на значения по умолчанию. Например:

load data infile 'try.txt' 
INTO TABLE MYTABLE
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
LINES TERMINATED BY '\n' STARTING BY '';
Другие вопросы по тегам