У мене є файл, який може містити від 3 до 4 стовпців числових значень, які розділені комою. Порожні поля визначаються за винятком випадків, коли вони знаходяться в кінці рядка:
1,2,3,4,5
1,2,3,,5
1,2,3
Наступна таблиця створена в MySQL:
+ ------- + -------- + ------ + ----- + --------- + ------- + | Поле | Тип | Нульовий | Ключові | За замовчуванням | Додаткові | + ------- + -------- + ------ + ----- + --------- + ------- + | один | int (1) | ТАК | | NULL | | | два | int (1) | ТАК | | NULL | | | три | int (1) | ТАК | | NULL | | | чотири | int (1) | ТАК | | NULL | | | п’ять | int (1) | ТАК | | NULL | | + ------- + -------- + ------ + ----- + --------- + ------- +
Я намагаюся завантажити дані за допомогою команди MySQL LOAD:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS
TERMINATED BY "," LINES TERMINATED BY "\n";
Отримана таблиця:
+ ------ + ------ + ------- + ------ + ------ + | один | два | три | чотири | п’ять | + ------ + ------ + ------- + ------ + ------ + | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | + ------ + ------ + ------- + ------ + ------ +
Проблема полягає в тому, що коли поле в порожніх даних порожнє і не визначене, MySQL чомусь не використовує значення за замовчуванням стовпців (яке NULL) і використовує нуль. NULL правильно використовується, коли поле взагалі відсутнє.
На жаль, я маю змогу розрізнити NULL від 0 на цьому етапі, тому будь-яка допомога буде вдячна.
Дякую С.
редагувати
Вихід ПОПЕРЕДЖЕНЬ:
+ --------- + ------ + -------------------------------- ------------------------ + | Рівень | Код | Повідомлення | + --------- + ------ + -------------------------------- ------------------------ + | Попередження | 1366 | Неправильне ціле значення: '' для стовпця 'чотири' у рядку 2 | | Попередження | 1261 | Рядок 3 не містить даних для всіх стовпців | | Попередження | 1261 | Рядок 3 не містить даних для всіх стовпців | + --------- + ------ + -------------------------------- ------------------------ +
LOAD DATA
. Див. Розділ прикладів SQL d6tstack щодо змін схеми даних.