26

我有一个包含超过 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 语句完全相同。previos 行也是正确的。

4

7 回答 7

26

由于在数据周围插入括号,我遇到了类似的问题:-(:

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")
  ); 
于 2013-11-03T18:58:06.343 回答
23

我面临着类似的错误。这只是缺少逗号的问题。检查插入语句中的所有项目是否用逗号分隔

于 2013-10-01T00:38:24.847 回答
9

就我而言,我的数据库表有一个与另一个表关联的触发器,并且触发表中缺少一列。像这样的东西:

表 1 列: UserAccountID、文档类型、权限、状态

触发表 2 列:修订号、修订状态、用户帐户 ID、权限、状态

因此,在表 2 中,缺少“文档类型”列。通过以下方式检查数据库中的触发器

“显示来自 {Database Name} 的触发器”

于 2017-04-19T13:43:38.587 回答
5

就我而言,我在 INSERT 上触发了列不匹配计数:(&

于 2017-02-18T06:38:35.823 回答
2

我也遇到了同样的问题。@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);
于 2019-08-10T10:36:41.147 回答
1

检查文件中的特殊隐藏字符。您可能认为文件中的所有空格都是空格,但有时其他字符会以某种您无法通过查看数据来理解的方式终止插入。

如果所有其他方法都失败,请手动重新键入 INSERT 并在文件中单独运行它以查看它是否仍然失败。

于 2012-10-24T09:53:58.323 回答
0

就我而言,它是“?”的数量。在准备好的声明中

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');
于 2018-12-27T16:35:27.943 回答