Heim >Datenbank >MySQL-Tutorial >Wie kann ich beim Importieren von CSV-Daten mit leeren Feldern in MySQL mithilfe von LOAD DATA INFILE mit NULL-Werten anstelle von Nullen umgehen?
Der LOAD-Befehl von MySQL bietet eine unkomplizierte Methode zum Importieren von Daten aus CSV-Dateien in Tabellen. Beim Laden numerischer Daten aus CSV-Dateien mit leeren Feldern neigt MySQL jedoch dazu, Nullen anstelle von NULL einzufügen, selbst wenn die Spalte als nullbar definiert ist.
Betrachten Sie die folgende CSV-Datei (testdata.txt):
1,2,3,4,5 1,2,3,,5 1,2,3
Und die folgende MySQL-Tabelle (moo):
CREATE TABLE moo ( one INT(1) NULL, two INT(1) NULL, three INT(1) NULL, four INT(1) NULL, five INT(1) NULL );
Beim Laden der CSV-Daten in die Moo-Tabelle mithilfe von LOAD-Befehl:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n";
Die resultierende Tabelle enthält:
+------+------+-------+------+------+ | one | two | three | four | five | +------+------+-------+------+------+ | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | +------+------+-------+------+------+
Wie Sie sehen können, weist MySQL leeren Feldern Null zu, was falsch ist, wenn Spalten NULL-Werte zulassen.
Um dieses Problem zu beheben und sicherzustellen, dass leere Felder korrekt als NULL behandelt werden, verwenden Sie die Funktion NULLIF(). NULLIF() benötigt zwei Argumente: das zu prüfende Feld und den zurückzugebenden Wert, wenn das Feld leer ist. So verwenden Sie es:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n" (one, two, three, @vfour, five) SET four = NULLIF(@vfour,'') ;
In diesem Beispiel wird das vierte Feld in eine lokale Variable @vfour eingelesen. Die SET-Anweisung weist dann vier zu NULL zu, wenn @vfour eine leere Zeichenfolge ist.
Wenn mehrere Felder leer sein können, lesen Sie sie alle in lokale Variablen ein und verwenden Sie mehrere SET-Anweisungen:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n" (@vone, @vtwo, @vthree, @vfour, @vfive) SET one = NULLIF(@vone,''), two = NULLIF(@vtwo,''), three = NULLIF(@vthree,''), four = NULLIF(@vfour,'') ;
Durch die Nutzung von NULLIF() kann MySQL LOAD jetzt leere Felder korrekt verarbeiten und NULL-Werte zuweisen, sodass Sie genau mit Daten in Ihren MySQL-Tabellen arbeiten können.
Das obige ist der detaillierte Inhalt vonWie kann ich beim Importieren von CSV-Daten mit leeren Feldern in MySQL mithilfe von LOAD DATA INFILE mit NULL-Werten anstelle von Nullen umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!