У меня есть файл, который может содержать из 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 по некоторым причинам не использует значение по умолчанию столбцов (который является ПУСТЫМ), и использует нуль. ПУСТОЙ УКАЗАТЕЛЬ используется правильно, когда поле отсутствует в целом.
К сожалению, я должен смочь различать ПУСТОЙ УКАЗАТЕЛЬ и 0 на данном этапе, таким образом, любая справка ценилась бы.
Спасибо S.
править
Вывод ВЫСТАВОЧНЫХ ПРЕДУПРЕЖДЕНИЙ:
+---------+------+--------------------------------------------------------+ | 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 | +---------+------+--------------------------------------------------------+
В руководстве по MySQL сказано:
При чтении данных с помощью LOAD DATA INFILE пустые или отсутствующие столбцы становятся {{1} } обновлен с помощью "". Если вам нужно значение NULL в столбце, вы должны использовать \ N в файле данных. Буквальное слово «NULL» также может использоваться при некоторых обстоятельствах.
Итак, вам нужно заменить пробелы на \ N следующим образом:
1,2,3,4,5
1,2,3,\N,5
1,2,3
Предварительно обработайте входной CSV-файл, чтобы заменить пустые записи на \ N.
Попытка регулярного выражения: s / ,, /, \ n, / g и s /, $ /, \ N / g
Удачи.