Maison >base de données >tutoriel mysql >Comment puis-je gérer les valeurs NULL au lieu des zéros lors de l'importation de données CSV avec des champs vides dans MySQL à l'aide de LOAD DATA INFILE ?

Comment puis-je gérer les valeurs NULL au lieu des zéros lors de l'importation de données CSV avec des champs vides dans MySQL à l'aide de LOAD DATA INFILE ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-04 14:02:39214parcourir

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

Gestion des valeurs NULL dans MySQL LOAD à partir d'un CSV avec des champs vides

La commande LOAD de MySQL offre une méthode simple pour importer des données à partir de fichiers CSV dans des tables. Cependant, lors du chargement de données numériques à partir de fichiers CSV contenant des champs vides, MySQL a tendance à insérer des zéros au lieu de NULL, même lorsque la colonne est définie comme nullable.

Considérez le fichier CSV suivant (testdata.txt) :

1,2,3,4,5
1,2,3,,5
1,2,3

Et la table MySQL suivante (moo) :

CREATE TABLE moo (
  one INT(1) NULL,
  two INT(1) NULL,
  three INT(1) NULL,
  four INT(1) NULL,
  five INT(1) NULL
);

Lors du chargement des données CSV dans la table moo à l'aide du Commande LOAD :

LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n";

La table résultante contiendra :

+------+------+-------+------+------+
| one  | two  | three | four | five |
+------+------+-------+------+------+
| 1    | 2    | 3     | 4    | 5    |
| 1    | 2    | 3     | 0    | 5    |
| 1    | 2    | 3     | NULL | NULL |
+------+------+-------+------+------+

Comme vous pouvez le constater, MySQL attribue zéro aux champs vides, ce qui est incorrect lorsque les colonnes autorisent les valeurs NULL.

Pour résoudre ce problème et garantir que les champs vides sont correctement traités comme NULL, utilisez la fonction NULLIF(). NULLIF() prend deux arguments : le champ à vérifier et la valeur à renvoyer si le champ est vide. Voici comment l'utiliser :

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,'')
;

Dans cet exemple, le quatrième champ est lu dans une variable locale @vfour. L'instruction SET en attribue ensuite quatre à NULL si @vfour est une chaîne vide.

Si plusieurs champs peuvent être vides, lisez-les tous dans des variables locales et utilisez plusieurs instructions SET :

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,'')
;

En tirant parti de NULLIF(), MySQL LOAD peut désormais gérer correctement les champs vides et attribuer des valeurs NULL, vous permettant ainsi de travailler avec précision avec les données de vos tables MySQL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn