J'ai un fichier qui peut contenir de 3 à 4 colonnes de valeurs numériques qui sont séparées par une virgule. Les champs vides sont définis à l'exception de ceux qui se trouvent à la fin de la ligne :
1,2,3,4,5
1,2,3,,5
1,2,3
La table suivante a été créée dans MySQL :
+-------+--------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| one | int(1) | YES | | NULL | |
| two | int(1) | YES | | NULL | |
| three | int(1) | YES | | NULL | |
| four | int(1) | YES | | NULL | |
| five | int(1) | YES | | 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 qui en résulte :
+------+------+-------+------+------+
| one | two | three | four | five |
+------+------+-------+------+------+
| 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 de la colonne (qui est NULL) et utilise zéro. NULL est utilisé correctement lorsque le champ est totalement absent.
Malheureusement, je dois être en mesure de faire la distinction entre NULL et 0 à ce stade ; toute aide serait donc la bienvenue.
Merci S.
modifier
La sortie de SHOW WARNINGS :
+---------+------+--------------------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------------------+
| Warning | 1366 | Incorrect integer value: '' for column 'four' at row 2 |
| Warning | 1261 | Row 3 doesn't contain data for all columns |
| Warning | 1261 | Row 3 doesn't contain data for all columns |
+---------+------+--------------------------------------------------------+