Я не могу загрузить таблицу 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 '';