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 :
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;
Table items :
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;
Mon csv à importer est de la forme :
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;;;
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.

Voici la requête d'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;
J'ai plusieurs problèmes avec cet import.

1/ Tout d'abord j'ai des warnings en retour :
/* Warning (1366): Incorrect integer value: '' for column 'categorie4' at row 1 */
/* Warning (1366): Incorrect integer value: '' for column 'categorie4' at row 2 */
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.

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.