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
Libérer: 2025-01-04 14:02:39
original
193 Les gens l'ont consulté

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
Copier après la connexion

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
);
Copier après la connexion

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";
Copier après la connexion

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 |
+------+------+-------+------+------+
Copier après la connexion

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,'')
;
Copier après la connexion

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,'')
;
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal