J'ai un fichier CSV avec une table exportée, qui a des lignes avec des champs qui ne contiennent pas de valeurs. Les colonnes sont séparées à l'aide de "," et si les champs n'ont pas de valeurs, ils ressemblent à cela: , j'ai essayé de charger les données en utilisant le code suivant:
LOAD DATA INFILE "C:/table.csv"
INTO TABLE target_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
Les colonnes de la table cible (à charger avec les données de ce fichier CSV) peuvent être annulées, mais le serveur renvoie une erreur:
"Incorrect integer value"
Lorsque je mets NULL entre virgules dans un fichier CSV, le serveur ne renvoie aucune erreur. Est-il possible de modifier certains paramètres pour charger la table sans modifier le fichier CSV?
Quelque chose comme ça, vérifier chaque valeur pour '' et insérer NULL à la place, peut aider. Modifiez a, b, c, d pour le nom réel et le nombre de lignes sur la table:
$ cat /tmp/test.csv
test1, test2, test3, test4
,,,
1,2,3,4
,,,
mysql> LOAD DATA INFILE "/tmp/test.csv" INTO TABLE test.test
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(@a, @b, @c, @d)
SET a = IF(@a = '', NULL, @a),
b = IF(@b = '', NULL, @b),
c = IF(@c = '', NULL, @c),
d = IF(@d = '', NULL, @d);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
mysql> SELECT * FROM test.test;
+------+------+------+------+
| a | b | c | d |
+------+------+------+------+
| NULL | NULL | NULL | NULL |
| 1 | 2 | 3 | 4 |
| NULL | NULL | NULL | NULL |
+------+------+------+------+
3 rows in set (0.00 sec)
Vérifiez la syntaxe pour LOAD DATA
pour plus de détails.
J'avais '|' séparateurs de champ. J'ai ouvert csv dans un bon éditeur comme vim et substitué || avec |\N |. Oui Majuscule N. C'est ce qu'un didacticiel a dit d'utiliser. En vim::% s/||/|\\N|/gc
gc est "global" "confirmer".
Dans le mien, il y avait deux champs vides ensemble, c'est-à-dire: |||
Vim ne ferait le premier que pour une raison quelconque. J'ai donc dû faire la commande une deuxième fois qui a eu la seconde.
Ensuite, mysql a chargé le fichier.