14000を超えるステートメントを含むmysqlファイルを持っています。それらはすべてテーブルへの挿入であり、コンソールを使用してファイルをインポートすると、次のエラーがスローされます。
ERROR 1136 (21S01) at line 1548: Column count doesn't match value count at row 45
列名で指定された行がVALUESリストで指定された行と異なる場合にエラーが表示されることは知っていますが、何度もチェックアウトし、両方のリストで列数がまったく同じです。
位置45の行は次のとおりです。
('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
そしてそれに関連する挿入行、上の多くの行は次のとおりです。
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
このエラーを探しましたが、カウントが異なる場合にのみ表示されるようですが、この場合は同じです。
何か案が?
編集:言及するのを忘れました:phpmyadminに直接sqlステートメントをスローすると、エラーなしで正しく行が追加されます。コマンドラインから実行した場合にのみクラッシュしますが、上記のステートメントはデータベースに正しく挿入されており、これらはほとんど同じです。
EDIT2:46までのすべての行を削除しました。ファイルを起動すると、エラーは次のようになります。
ERROR 1136 (21S01) at line 1503: Column count doesn't match value count at row 45
行を変更するだけですが、その行はINSERTステートメントであり、ファイルの他の部分にある他のINSERTステートメントとまったく同じです。前の行も正しいです。
データの周りに括弧を挿入したため、同様の問題に直面しました:-(:
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")
);
私は同様のエラーに直面していました。それはコンマが欠落しているだけの問題でした。 insertステートメント内のすべてのアイテムがコンマで区切られているかどうかを確認します
私の場合、データベーステーブルには別のテーブルに関連付けられたトリガーがあり、トリガーされたテーブルに1つの列がありませんでした。このようなもの:
Table1列: UserAccountID、ドキュメントタイプ、権限、ステータス
トリガーされた表2の列:リビジョン番号、リビジョンステータス、UserAccountID、権限、ステータス
そのため、表2では、「ドキュメントタイプ」列がありませんでした。次の方法でDBのトリガーを確認します
「{データベース名}からトリガーを表示」
私の場合、列の不一致カウントを持つINSERTでトリガーがありました:(&
ファイル内の特殊な非表示文字を確認してください。ファイル内のすべての空白はスペースであると考えるかもしれませんが、他の文字がデータを見て理解できない何らかの方法で挿入を殺すことがあります。
他のすべてが失敗した場合は、INSERTを手動で再入力し、ファイルで単独で実行して、まだ失敗するかどうかを確認します。
私も同じ問題に出会いました。 @valploの答えは正しい。コメントするのに十分な評判がないので、ここに書きます。
複数の値を挿入する正しい方法は、キーワードVALUES
の後に値をリストすることです。複数の値エントリを囲む括弧ではなく、単一値エントリを囲む括弧を使用し、各単一値エントリをカンマで区切ります。
間違った方法は次のとおりです。
INSERT INTO my_table(column_name_0, column_name_1) VALUES(
(val_00, val_01),
(val_10, val_11)
);
正しい方法は次のとおりです。
INSERT INTO my_table(column_name_0, column_name_1) VALUES
(val_00, val_01),
(val_10, val_11);
私の場合、「?」の数でした。準備された声明で
prepare stmt1 from "insert into company (name, address, phone) values(?,?);";
/*note only 2 question marks which should be 3.*/
これも同じエラーをトリガーします
insert into company (name, address, phone) values('foo','bar');