J'ai un fichier mysql avec plus de 14 000 instructions . Toutes sont insérées dans une table, et lorsque j'importe le fichier à l'aide de la console, l'erreur suivante est générée:
ERROR 1136 (21S01) at line 1548: Column count doesn't match value count at row 45
Je sais que l'erreur apparaît lorsque les lignes spécifiées dans les noms de colonnes sont différentes de celles spécifiées dans la liste VALUES, mais je l'ai extraite à plusieurs reprises et le nombre de colonnes est exactement le même dans les deux listes.
La ligne en position 45 est:
('00553', 'AAA', 'BBB', 'CCC', 'XXXXXXXXR', 'user address', 'spain', 'spain', '39212', '1900-01-21', '123456789', 'M', 'No disponible', 0, 'AAA', 'BBB ', 'CCC', 'XXXXXXXXR', NULL, '888993344', '', '', '', '', 'no', 'no') --> 26 columns
et la ligne d'insertion qui lui est associée, de nombreuses lignes ci-dessus sont:
INSERT INTO `users` (`id_patient`, `name`, `surname1`, `surname2`, `dni`, `address`, `city`, `state`, `postal_code`, `birthday`, `telephone`, `sex`, `email`, `lopd_status`, `lopd_name`, `lopd_surname1`, `lopd_surname2`, `lopd_dni`, `lopd_as`, `mobile_phone`, `notes`, `job`, `company`, `place`, `active_citation`, `signature`) --> 26 columns
J'ai cherché cette erreur mais il semble qu'elle n'apparaisse que lorsque le nombre est différent, mais dans ce cas, c'est la même chose.
Une idée?
EDIT: oublié de mentionner: si je jette la déclaration SQL directement sur phpmyadmin, la ligne est ajoutée correctement sans erreur. Il se bloque uniquement lorsqu'il est exécuté à partir de la ligne de commande, bien que les instructions ci-dessus soient correctement insérées dans la base de données et qu'elles soient presque identiques à celle-ci.
EDIT2: J'ai supprimé toutes les lignes jusqu'au 46 et lorsque je lance le fichier, les erreurs sont les suivantes:
ERROR 1136 (21S01) at line 1503: Column count doesn't match value count at row 45
Cela change seulement la ligne, mais cette ligne est l'instruction INSERT, qui est exactement la même que les autres instructions INSERT du reste du fichier. La ligne précédente est également correcte.
J'ai rencontré un problème similaire à cause de l'insertion de parenthèses autour des données :-(:
INSERT INTO Customers (Name,LastCredit,CreditDate) VALUES ( <-- Here.
("Nuclear Millitary Systems",500.0,CURRENT_DATE),
("Evil Corporation",67890.95,"2012-02-12"),
("Nuke Software Systems",5600.0,"2013-05-06"),
("RR Millitary",600.0,"2013-05-06"),
("Random Automation",560.0,"2012-05-01"),
("Evil Data Systems",600.0,"2013-03-01")
);
Je faisais face à une erreur similaire. C'était juste la question d'une virgule manquante. Vérifiez si tous les éléments de l'instruction insert sont séparés par des virgules
Dans mon cas, ma table de base de données a un déclencheur associé à une autre table et il manquait une colonne dans la table déclenchée. Quelque chose comme ça:
Colonnes de la Table1: UserAccountID, Type de document, autorisations, Statut
Colonnes déclenchées du tableau 2: Numéro de révision, Statut de révision, UserAccountID, Autorisations, Statut
Donc, dans le tableau 2, la colonne "type de document" était manquante. Vérifiez les déclencheurs dans la base de données en
"affiche les déclencheurs de {Nom de la base de données}"
Dans mon cas, j’avais trigger sur INSERT avec un nombre de discordances de colonne: (&
Recherchez des caractères spéciaux cachés dans le fichier. Vous pourriez penser que tous les espaces blancs du fichier sont des espaces, mais parfois, d'autres caractères peuvent tuer l'insertion d'une manière que vous ne pouvez pas comprendre en consultant les données.
Si tout échoue, retapez manuellement INSERT et exécutez-le dans un fichier pour voir s'il échoue toujours.
Dans mon cas, c'était le nombre de "?" dans la déclaration préparée
prepare stmt1 from "insert into company (name, address, phone) values(?,?);";
/*note only 2 question marks which should be 3.*/
Cela déclenchera également la même erreur
insert into company (name, address, phone) values('foo','bar');