it-swarm.com.de

Msgstr "Die Anzahl der Spalten stimmt nicht mit der Anzahl der Werte in der Zeile überein."

Ich habe eine Mysql-Datei mit mehr als 14000 Anweisungen. Alle sind Einfügungen in eine Tabelle, und wenn ich die Datei mit der Konsole importiere, wird der folgende Fehler ausgegeben:

ERROR 1136 (21S01) at line 1548: Column count doesn't match value count at row 45

Ich weiß, dass ein Fehler angezeigt wird, wenn sich die in den Spaltennamen angegebenen Zeilen von den in der VALUES-Liste angegebenen Zeilen unterscheiden, aber ich habe es oft überprüft und die Anzahl der Spalten ist in beiden Listen identisch.

Die Zeile in Position 45 ist:

('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

und die dazugehörige Einfügungszeile, viele Zeilen darüber sind:

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

Ich habe nach diesem Fehler gesucht, aber es scheint, als würde er nur erscheinen, wenn count anders ist, aber in diesem Fall ist es dasselbe.

Irgendeine Idee?

BEARBEITEN: Ich habe vergessen zu erwähnen: Wenn ich die SQL-Anweisung direkt auf phpmyadmin abwerfe, wird die Zeile korrekt und fehlerfrei hinzugefügt. Es stürzt nur ab, wenn es von der Befehlszeile aus ausgeführt wird, obwohl die Anweisungen darüber korrekt in die Datenbank eingefügt werden und fast identisch mit dieser Anweisung sind.

EDIT2: Ich habe alle Zeilen bis zur 46 entfernt und wenn ich die Datei starte, sieht der Fehler folgendermaßen aus:

ERROR 1136 (21S01) at line 1503: Column count doesn't match value count at row 45

Es ändert nur die Zeile, aber diese Zeile ist die INSERT-Anweisung, die genau derselbe ist wie die anderen INSERT-Anweisungen im Rest der Datei. Die vorherige Zeile ist auch korrekt.

16
Pask

Ich hatte ein ähnliches Problem, weil ich Daten in Klammern setzte:

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")
  ); 
15
valplo

Ich hatte einen ähnlichen Fehler. Es war nur ein fehlendes Komma. Überprüfen Sie, ob alle Elemente in der Einfügeanweisung durch Kommas getrennt sind

16
Dolly

In meinem Fall hat meine Datenbanktabelle einen Auslöser, der einer anderen Tabelle zugeordnet ist. In der ausgelösten Tabelle fehlt eine Spalte. Etwas wie das: 

Tabelle1-Spalten: UserAccountID, Dokumenttyp, Berechtigungen, Status

Ausgelöst Tabelle 2 Spalten: Revisionsnummer, Revisionsstatus, UserAccountID, Berechtigungen, Status 

In der Tabelle 2 fehlte also die Spalte "Dokumenttyp". .__ Überprüfen Sie die Trigger in der DB durch

"Trigger von {Datenbankname} anzeigen"

6
Neetigya

In meinem Fall hatte ich einen trigger für INSERT mit Spaltenkonfliktanzahl: (&

3
Anand Rockzz

Suchen Sie nach versteckten Sonderzeichen in der Datei. Sie denken vielleicht, dass alle Leerzeichen in der Datei Leerzeichen sind, aber manchmal können andere Charaktere die Einfügung auf eine Weise töten, die Sie durch das Betrachten der Daten nicht verstehen können.

Wenn alles andere fehlschlägt, geben Sie das INSERT erneut manuell ein und führen Sie es in einer eigenen Datei aus, um zu sehen, ob es immer noch fehlschlägt.

1
davidethell

Ich habe das gleiche Problem auch getroffen. @ Valplos Antwort ist richtig. Da ich nicht genug Reputation habe, um Kommentare abzugeben, schreibe ich es hier.

Die richtige Methode zum Einfügen mehrerer Werte besteht darin, die Werte nach dem Schlüsselwort VALUES aufzulisten, nicht in Klammern um mehrere Werteinträge, sondern in Klammern um einzelne Werteinträge, und jeden einzelnen Werteintrag durch Komma zu trennen.

Der falsche Weg ist:

INSERT INTO my_table(column_name_0, column_name_1) VALUES(
    (val_00, val_01),
    (val_10, val_11)
);

Der richtige Weg ist:

INSERT INTO my_table(column_name_0, column_name_1) VALUES
    (val_00, val_01),
    (val_10, val_11);
0
Yong Yang

In meinem Fall war es die Anzahl von "?" in der vorbereiteten Aussage

prepare stmt1 from  "insert into company (name, address, phone) values(?,?);";
/*note only 2 question marks which should be 3.*/

Dies wird auch den gleichen Fehler auslösen 

insert into company (name, address, phone) values('foo','bar');
0
Accountant م