Ho un file che può contenere da 3 a 4 colonne di valori numerici che sono separati da una virgola. I campi vuoti vengono definiti con l'eccezione quando si trovano alla fine della riga:
1,2,3,4,5
1,2,3,,5
1,2,3
La seguente tabella è stata creata in MySQL:
+ ------- + -------- + ------ + ----- + --------- + ------- + | Campo | Digita | Null | Chiave | Predefinito | Extra | + ------- + -------- + ------ + ----- + --------- + ------- + | uno | int (1) | SÌ | | NULL | | | due | int (1) | SÌ | | NULL | | | tre | int (1) | SÌ | | NULL | | | quattro | int (1) | SÌ | | NULL | | | cinque | int (1) | SÌ | | NULL | | + ------- + -------- + ------ + ----- + --------- + ------- +
Sto cercando di caricare i dati utilizzando il comando LOAD MySQL:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS
TERMINATED BY "," LINES TERMINATED BY "\n";
La tabella risultante:
+ ------ + ------ + ------- + ------ + ------ + | uno | due | tre | quattro | cinque | + ------ + ------ + ------- + ------ + ------ + | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | + ------ + ------ + ------- + ------ + ------ +
Il problema sta nel fatto che quando un campo è vuoto nei dati non elaborati e non è definito, MySQL per qualche motivo non utilizza il valore predefinito delle colonne (che è NULL) e usa zero. NULL viene utilizzato correttamente quando il campo manca del tutto.
Sfortunatamente, devo essere in grado di distinguere tra NULL e 0 in questa fase, quindi qualsiasi aiuto sarebbe apprezzato.
Grazie S.
modificare
L'output di SHOW WARNINGS:
+ --------- + ------ + -------------------------------- ------------------------ + | Livello | Codice | Messaggio | + --------- + ------ + -------------------------------- ------------------------ + | Avvertenza | 1366 | Valore intero errato: '' per la colonna 'quattro' alla riga 2 | | Avvertenza | 1261 | La riga 3 non contiene dati per tutte le colonne | | Avvertenza | 1261 | La riga 3 non contiene dati per tutte le colonne | + --------- + ------ + -------------------------------- ------------------------ +
LOAD DATA
. Vedere la sezione Esempi SQL d6tstack sulle modifiche allo schema dei dati.