J'ai un fichier qui peut contenir de 3 à 4 colonnes de valeurs numériques séparées par une virgule. Les champs vides sont définis à l'exception quand ils sont à la fin de la ligne:MySQL charge les valeurs NULL à partir des données CSV
1,2,3,4,5
1,2,3,,5
1,2,3
Le tableau suivant a été créé en 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 | | +-------+--------+------+-----+---------+-------+
Je suis en train de charger les données en utilisant la commande MySQL LOAD :
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS
TERMINATED BY "," LINES TERMINATED BY "\n";
Le tableau résultant:
+------+------+-------+------+------+ | 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 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 manquant tous ensemble.
Malheureusement, je dois être capable de distinguer entre NULL et 0 à ce stade, donc toute aide serait appréciée.
Merci S.
modifier
La sortie 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 | +---------+------+--------------------------------------------------------+
a-t-il un impact sur les performances? – Blacksonic
Théoriquement, je suppose - mais tout est en mémoire, et ne contenant que de petites quantités de données par rangée, donc j'imaginerais que ce serait infinitésimal, mais vous devriez le tester si vous pensez que cela pourrait être un problème –
J'aime vraiment cette réponse. Les utilisateurs peuvent voir des chaînes vides '''' quand ils téléchargent un csv (en utilisant 'IFNULL (Col, '')' dans la requête 'SELECT INTO OUTFILE') pour excel mais ensuite les uploads les acceptent comme null par rapport à \ N 'dans le csv. Merci! – chrisan