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?

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?

Susan Sarandon
Susan SarandonOriginal
2025-01-04 14:02:39180Durchsuche

How Can I Handle NULL Values Instead of Zeros When Importing CSV Data with Empty Fields into MySQL Using LOAD DATA INFILE?

Umgang mit NULL-Werten in MySQL LOAD aus CSV mit leeren Feldern

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn