J'ai un fichier qui peut contenir de 3 à 4 colonnes de valeurs numériques séparées par des virgules. Les champs vides sont définis à l'exception lorsqu'ils se trouvent à la fin de la ligne:
1,2,3,4,5
1,2,3,,5
1,2,3
Le tableau suivant a été créé dans MySQL:
+ ------- + -------- + ------ + ----- + --------- + ------- + | Champ | Type | Null | Clé | Par défaut | Extra | + ------- + -------- + ------ + ----- + --------- + ------- + | un | int (1) | OUI | | NULL | | | deux | int (1) | OUI | | NULL | | | trois | int (1) | OUI | | NULL | | | quatre | int (1) | OUI | | NULL | | | cinq | int (1) | OUI | | NULL | | + ------- + -------- + ------ + ----- + --------- + ------- +
J'essaie de charger les données à l'aide de la commande MySQL LOAD:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS
TERMINATED BY "," LINES TERMINATED BY "\n";
Le tableau résultant:
+ ------ + ------ + ------- + ------ + ------ + | un | deux | trois | quatre | cinq | + ------ + ------ + ------- + ------ + ------ + | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | + ------ + ------ + ------- + ------ + ------ +
Le problème réside dans le fait que lorsqu'un champ est vide dans les données brutes et n'est pas défini, MySQL pour une raison quelconque n'utilise pas la valeur par défaut des colonnes (qui est NULL) et utilise zéro. NULL est utilisé correctement lorsque le champ est totalement absent.
Malheureusement, je dois être capable de faire la distinction entre NULL et 0 à ce stade, donc toute aide serait appréciée.
Merci S.
Éditer
La sortie de SHOW WARNINGS:
+ --------- + ------ + -------------------------------- ------------------------ + | Niveau | Code | Message | + --------- + ------ + -------------------------------- ------------------------ + | Avertissement | 1366 | Valeur entière incorrecte: «» pour la colonne «quatre» à la ligne 2 | | Avertissement | 1261 | La ligne 3 ne contient pas de données pour toutes les colonnes | | Avertissement | 1261 | La ligne 3 ne contient pas de données pour toutes les colonnes | + --------- + ------ + -------------------------------- ------------------------ +
LOAD DATA
. Voir la section des exemples SQL de d6tstack sur les changements de schéma de données.