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!