У меня есть файл, который может содержать от 3 до 4 столбцов числовых значений, разделенных запятыми. Пустые поля определяются за исключением случаев, когда они находятся в конце строки:
1,2,3,4,5
1,2,3,,5
1,2,3
Следующая таблица была создана в MySQL:
+-------+--------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+-------+ | one | int(1) | YES | | NULL | | | two | int(1) | YES | | NULL | | | three | int(1) | YES | | NULL | | | four | int(1) | YES | | NULL | | | five | int(1) | YES | | NULL | | +-------+--------+------+-----+---------+-------+
Я пытаюсь загрузить данные с помощью команды MySQL LOAD:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS
TERMINATED BY "," LINES TERMINATED BY "\n";
Итоговая таблица:
+------+------+-------+------+------+ | one | two | three | four | five | +------+------+-------+------+------+ | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | +------+------+-------+------+------+
Проблема заключается в том, что когда поле в необработанных данных пустое и не определено, MySQL по какой-то причине не использует значение столбца по умолчанию (которое равно NULL) и использует ноль. NULL используется правильно, когда поле полностью отсутствует.
К сожалению, на этом этапе я должен уметь различать NULL и 0, поэтому любая помощь будет принята с благодарностью.
Спасибо С.
редактировать
Вывод ПОКАЗАТЬ ПРЕДУПРЕЖДЕНИЯ:
+---------+------+--------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------+ | Warning | 1366 | Incorrect integer value: '' for column 'four' at row 2 | | Warning | 1261 | Row 3 doesn't contain data for all columns | | Warning | 1261 | Row 3 doesn't contain data for all columns | +---------+------+--------------------------------------------------------+
LOAD DATA
. См. Раздел примеры SQL d6tstack об изменении схемы данных. - person citynorman   schedule 15.10.2018