it-swarm.com.ru

"Неизвестный столбец в" списке полей "", но столбец существует

DROP TABLE IF EXISTS `transactions`;
CREATE TABLE `transactions` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `purchase_date` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `transactions` (`purchase_date`) VALUES (NULL)

Я выделил мою проблему в этом коде. Когда я запускаю его, я получаю сообщение об ошибке:

[ОШИБКА в запросе 3] Неизвестный столбец 'purchase_date' в 'списке полей'

Есть идеи?

11
Rits

Существует непечатаемый символ 30 (RecordSeparator), вставленный между purchase_date и ' в операторе INSERT. Просто удалите текст ('purchase_date') и перепишите его вручную, все будет хорошо.

17
whetstone

Nery нишу решение, когда я получил эту ошибку. 

У меня в таблице был триггер BEFORE INSERT, который что-то делал с NEW.`field_mysql_doesnt_think_exists` , и если я не передал это поле в оператор вставки, я бы получил 

[ERROR in query 3] Unknown column 'field_mysql_doesnt_think_exists' in 'field list'

4
Lewis

Я просто провел большую часть дня, выясняя это. Моя проблема была та же: невидимые символы, кибошинг запроса и возвращение ошибки «неизвестный столбец». 

Я решил это, вернувшись в Windows и удалив мусор с помощью NotePad ++.

Как мусор попал туда в первую очередь? Я думаю, это потому, что я сделал ошибку, скопировав несколько длинных сложных запросов в LibreOffice Writer (мой документ с функциональными спецификациями) вместо того, чтобы просто добавлять их в phpMyAdmin или сохранять в текстовом редакторе. Вставка их из LibreOffice в окно запроса - вот откуда (я думаю) мусор.

Оказавшись там, он сохранился, как малярия. Я даже не смог избавиться от него, перепечатав вручную весь запрос - мне пришлось поместить его в NotePad ++ (меню кодирования) и показать комбинации ANSI и UTF8, а затем вручную удалить мусор.

Как только это было сделано, запрос работал.

3
prokaryote

Это также может произойти, если вы вставляете имя столбца при построении структуры таблицы. Та же ошибка - но непечатные/невидимые символы находятся в структуре таблицы, а не в запросе.

2
designgroop

Та же ошибка в другом сценарии:

Это также происходит, когда вы пропускаете символ @ для переменной.

SET @myVar1=1;  SELECT @myVar1;  -- GOOD, correctly prints:  1
SET @myVar1=1;  SELECT  myVar1;  -- BAD, prints:  Unknown column 'myVar1' in 'field list' 
0
Manohar Reddy Poreddy

Это может никому не помочь, но добавление «на всякий случай» кому-то поможет. 

В моей ситуации это было другое решение.

Я получаю большие наборы данных в виде файлов Excel CSV и использую скрипт (WIL) для преобразования файла .csv в импортируемый файл .sql. В моем скрипте произошла ошибка, из-за которой эти две строки не ссылались на одно и то же имя таблицы (я жестко запрограммировал первое местоположение и забыл обновить его):

* "INSERT INTO `old_table_name` (`cid`, `date`, etc etc"
* "CREATE TABLE IF NOT EXISTS `":_dbName:"` (etc etc "

Я просто изменил первую строку, чтобы также получить имя таблицы из переменной, и вуаля!

* "INSERT INTO `":_dbName:"` (`cid`, `date`, etc etc"

Так что проверьте эти две строки в вашем файле импорта SQL.

0
gibberish