Mam plik, który może zawierać od 3 do 4 kolumn wartości liczbowych oddzielonych przecinkami. Puste pola są definiowane z wyjątkiem sytuacji, gdy znajdują się na końcu wiersza:
1,2,3,4,5
1,2,3,,5
1,2,3
Poniższa tabela została utworzona w MySQL:
+ ------- + -------- + ------ + ----- + --------- + ------- + | Pole | Wpisz | Null | Klucz | Domyślnie | Extra | + ------- + -------- + ------ + ----- + --------- + ------- + | jeden | int (1) | TAK | | NULL | | | dwa | int (1) | TAK | | NULL | | | trzy | int (1) | TAK | | NULL | | | cztery | int (1) | TAK | | NULL | | | pięć | int (1) | TAK | | NULL | | + ------- + -------- + ------ + ----- + --------- + ------- +
Próbuję załadować dane za pomocą polecenia MySQL LOAD:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS
TERMINATED BY "," LINES TERMINATED BY "\n";
Wynikowa tabela:
+ ------ + ------ + ------- + ------ + ------ + | jeden | dwa | trzy | cztery | pięć | + ------ + ------ + ------- + ------ + ------ + | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | + ------ + ------ + ------- + ------ + ------ +
Problem polega na tym, że gdy pole jest puste w danych surowych i nie jest zdefiniowane, MySQL z jakiegoś powodu nie używa domyślnej wartości kolumny (która jest równa NULL) i używa zera. NULL jest używane poprawnie, gdy brakuje całego pola.
Niestety na tym etapie muszę umieć odróżnić NULL od 0, więc każda pomoc będzie mile widziana.
Dzięki S.
edytować
Wyjście POKAŻ OSTRZEŻENIA:
+ --------- + ------ + -------------------------------- ------------------------ + | Poziom | Kod | Wiadomość | + --------- + ------ + -------------------------------- ------------------------ + | Ostrzeżenie | 1366 | Nieprawidłowa liczba całkowita: „” dla kolumny „cztery” w wierszu 2 | | Ostrzeżenie | 1261 | Wiersz 3 nie zawiera danych dla wszystkich kolumn | | Ostrzeżenie | 1261 | Wiersz 3 nie zawiera danych dla wszystkich kolumn | + --------- + ------ + -------------------------------- ------------------------ +
LOAD DATA
. Zobacz sekcję z przykładami SQL d6tstack na temat zmian schematu danych.