Количество столбцов не соответствует количеству значений в строке, но соответствует

У меня есть файл mysql с более чем 14000 операторов. Все они вставляются в таблицу, и когда я импортирую файл с помощью консоли, выдается следующая ошибка:

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

Я искал эту ошибку, но кажется, что она появляется только тогда, когда количество отличается, но в этом случае это одно и то же.

Есть идеи?

РЕДАКТИРОВАТЬ: забыл упомянуть: если я выброшу оператор sql непосредственно в phpmyadmin, он правильно добавит строку без каких-либо ошибок. Он вылетает только при запуске из командной строки, хотя операторы над ним правильно вставляются в базу данных и они почти такие же, как этот.

EDIT2: я удалил все строки до 46, и когда я запускаю файл, ошибки следующие:

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

Он изменяет только строку, но эта строка является оператором INSERT, точно таким же, как и другие операторы INSERT в остальной части файла. Предыдущая строка также верна.


person Pask    schedule 24.10.2012    source источник
comment
проверьте также строки 44 и 46...   -  person rael_kid    schedule 24.10.2012
comment
Я также проверил их, и у них также есть 26 столбцов.   -  person Pask    schedule 24.10.2012
comment
Как оператор создания таблицы ищет эту таблицу?   -  person Olaf Dietsche    schedule 24.10.2012
comment
Попробуйте извлечь оператор в отдельный файл и передать его в mysql. Это должно быть легче отлаживать, чем 14000 операторов одновременно.   -  person Olaf Dietsche    schedule 24.10.2012
comment
Кажется, у меня есть ограничение по символам, поэтому я не могу вставить полный оператор создания таблицы, но он имеет 30 полей, 4 из них не вставляются в оператор вставки. Единственными значениями, которые не могут быть нулевыми, являются первые 8, но в этой строке все они имеют указанное значение, поэтому ошибка не может быть связана со значениями: S Я также извлек оператор в отдельный файл, поэтому он имеет только вставку строка и строка значений, и добавление этого оператора непосредственно в mysql правильно вставило его в базу данных.   -  person Pask    schedule 24.10.2012
comment
Похоже, у вас есть ограничение в 44,5 строки данных в любом инструменте, который вы используете.   -  person user207421    schedule 01.10.2013


Ответы (7)


Я столкнулся с аналогичной проблемой из-за вставки круглых скобок вокруг данных :-(:

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")
  ); 
person valplo    schedule 03.11.2013

Я столкнулся с подобной ошибкой. Дело было только в пропущенной запятой. Проверьте, все ли элементы в операторе вставки разделены запятыми.

person Dolly    schedule 01.10.2013
comment
Это было просто так! YACPG - еще один копипаст-гуф :) - person Santosh; 18.11.2016

В моем случае моя таблица базы данных имеет триггер, связанный с другой таблицей, и в триггерной таблице отсутствует один столбец. Что-то вроде этого:

Столбцы таблицы 1: UserAccountID, тип документа, разрешения, статус

Столбцы Инициируемая таблица 2: номер версии, статус версии, идентификатор учетной записи пользователя, разрешения, статус.

Так в таблице 2 отсутствовал столбец "тип документа". Проверьте триггеры в БД по

"показать триггеры из {Имя базы данных}"

person Neetigya    schedule 19.04.2017
comment
Это была моя проблема :) - person Jacopo; 22.03.2018

В моем случае у меня был триггер на INSERT с количеством несовпадений столбцов :(&

person Anand Rockzz    schedule 18.02.2017

Я тоже встретил ту же проблему. Ответ @ 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);
person Yong Yang    schedule 10.08.2019
comment
Возможно, если бы у вас было больше репутации, вы бы не опубликовали ответ, идентичный принятому ответу за 6 лет до этого. - person hackel; 22.06.2020

Проверьте наличие в файле специальных скрытых символов. Вы можете подумать, что все пробелы в файле — это пробелы, но иногда другие символы могут прерывать вставку каким-то образом, который вы не можете понять, глядя на данные.

Если ничего не помогает, повторно введите INSERT вручную и запустите его в отдельном файле, чтобы проверить, не сработает ли он по-прежнему.

person davidethell    schedule 24.10.2012
comment
Я удалил все специальные символы в строке до и после этого, но ошибка сохраняется. Я также поместил эту строку и следующую в отдельный файл, и mysql правильно вставляет их в базу данных. Это начинает раздражать... - person Pask; 24.10.2012
comment
Более того, передача mysql файла, содержащего 4 строки перед ним и следующие 4 строки, также проходит нормально :( - person Pask; 24.10.2012
comment
Я импортировал файл в phpmyadmin, но ошибка та же. - person Pask; 24.10.2012
comment
В конце концов я решил избавиться от всего файла и снова экспортировать таблицу, поэтому после некоторых изменений все было импортировано. - person Pask; 25.10.2012

В моем случае это было число "?" в подготовленном заявлении

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');
person Accountant م    schedule 27.12.2018