Нулевые значения загрузки MySQL от данных CSV

У меня есть файл, который может содержать из 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             | 
+---------+------+--------------------------------------------------------+
160
задан Spiros 28 August 2016 в 11:47
поделиться

2 ответа

В руководстве по MySQL сказано:

При чтении данных с помощью LOAD DATA INFILE пустые или отсутствующие столбцы становятся {{1} } обновлен с помощью "". Если вам нужно значение NULL в столбце, вы должны использовать \ N в файле данных. Буквальное слово «NULL» также может использоваться при некоторых обстоятельствах.

Итак, вам нужно заменить пробелы на \ N следующим образом:

1,2,3,4,5
1,2,3,\N,5
1,2,3
126
ответ дан 23 November 2019 в 21:30
поделиться

Предварительно обработайте входной CSV-файл, чтобы заменить пустые записи на \ N.

Попытка регулярного выражения: s / ,, /, \ n, / g и s /, $ /, \ N / g

Удачи.

2
ответ дан 23 November 2019 в 21:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: