Bonjour,
J'utilise MySQL 5.6.12 en localhost (via WAMP, sous W8.1). Je voudrais faire un import de données depuis un CSV. Voici mes tables :
Table categories :
Table items :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE TABLE `categories` ( `id` TINYINT(2) NOT NULL AUTO_INCREMENT, `nom` VARCHAR(80) NOT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `nom` (`nom`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB;
Mon csv à importer est de la forme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 CREATE TABLE `items` ( `id` INT(6) NOT NULL AUTO_INCREMENT, `titre` VARCHAR(255) NULL DEFAULT NULL, `categorie1` TINYINT(2) NULL DEFAULT '0', `categorie2` TINYINT(2) NULL DEFAULT '0', `categorie3` TINYINT(2) NULL DEFAULT '0', `categorie4` TINYINT(2) NULL DEFAULT '0', PRIMARY KEY (`id`), INDEX `fk_categorie1` (`categorie1`), INDEX `fk_categorie2` (`categorie2`), INDEX `fk_categorie3` (`categorie3`), INDEX `fk_categorie4` (`categorie4`), CONSTRAINT `fk_categorie1` FOREIGN KEY (`categorie1`) REFERENCES `categories` (`id`) ON UPDATE CASCADE ON DELETE SET NULL, CONSTRAINT `fk_categorie2` FOREIGN KEY (`categorie2`) REFERENCES `categories` (`id`) ON UPDATE CASCADE ON DELETE SET NULL, CONSTRAINT `fk_categorie3` FOREIGN KEY (`categorie3`) REFERENCES `categories` (`id`) ON UPDATE CASCADE ON DELETE SET NULL, CONSTRAINT `fk_categorie4` FOREIGN KEY (`categorie4`) REFERENCES `categories` (`id`) ON UPDATE CASCADE ON DELETE SET NULL ) COLLATE='utf8_general_ci' ENGINE=InnoDB;
Comme vous le voyez, j'ai une ou plusieurs catégories par item, faisant référence à la table des catégories. J'ai bien mis les champs categorieX à NULL pour cela.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 "Titre";"Catégorie1";"Catégorie2";"Catégorie3";"Catégorie4" "Ligne1";1;2;3;4 "Ligne2";1;2;; "Ligne3";1;;;
Voici la requête d'import :
J'ai plusieurs problèmes avec cet import.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 LOAD DATA LOCAL INFILE 'items.csv' INTO TABLE `items` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (`titre`, `categorie1`, `categorie2`, `categorie3`, `categorie4`); SHOW WARNINGS;
1/ Tout d'abord j'ai des warnings en retour :
Pourquoi cela ? le champ est Nullable, et par défaut à 0 s'il n'y a pas de valeur dans le csv. J'ai testé en enlevant les foreign keys, même erreur./* Warning (1366): Incorrect integer value: '' for column 'categorie4' at row 1 */
/* Warning (1366): Incorrect integer value: '' for column 'categorie4' at row 2 */
2/ Ensuite second souci, je n'importe que 100 lignes, alors que mon fichier en contient plus. Il s'agit peut-être d'une config ? Mais je trouve pas quoi changer pour importer tout le fichier et non x lignes. J'ai aussi essayé avec un client (HeidiSQL), même constat.
Merci d'avance pour votre aide.
Partager