2015-02-24 4 views
0

Я был пчелиным по написанию кода и тестировал его, когда я ударил эту ошибку.Ошибка (1054): Неизвестный столбец «enable_flag» в поле «field_list»

update products set enable_flag='Y' where prod_id=31745 
ERROR @ 214 : (1054) 
Unknown column 'enable_flag' in 'field list' 

Поле «enable_flag» указано в таблице. Я попробовал несколько вариантов вышеупомянутой команды SQL. Я положил backticks вокруг «продуктов», вокруг «enable_flag», я попытался переименовать команду - все безрезультатно. Я даже подумал, что, возможно, я превысил предел в 65 656 символов, но нет. Итак, я пришел сюда, прочитал о том, что у другого есть аналогичная проблема, но все это были «Ты ошибся X» или «Ты оставил имя таблицы» и т. Д. Это немного озадачило меня. Я использую MySQL (последняя версия), PHP 5.4.12, а до вчерашнего дня я работал в основном с первой половиной таблицы. Итак, теперь я начинаю работать со второй половиной, и это происходит. Кроме того, enable_flag - это столбец 52. Я знаю, что вы можете иметь 4096 столбцов. Однако, ничего из колонны 52 на не могут быть обновлены, вставлены и т.д ....

Вот таблица «продукты» свалка:

+--------------------+---------------+------+-----+---------+----------------+ 
| Field    | Type   | Null | Key | Default | Extra   | 
+--------------------+---------------+------+-----+---------+----------------+ 
| prod_id   | bigint(20) | NO | PRI | NULL | auto_increment | 
| sku    | varchar(40) | YES |  | NULL |    | 
| upc    | varchar(40) | YES |  | NULL |    | 
| title    | text   | YES |  | NULL |    | 
| long_desc   | mediumtext | YES |  | NULL |    | 
| cat_id    | int(11)  | YES |  | NULL |    | 
| size    | varchar(80) | NO |  | NULL |    | 
| color    | varchar(80) | NO |  | NULL |    | 
| model    | varchar(80) | YES |  | NULL |    | 
| quantity   | int(11)  | YES |  | NULL |    | 
| stock_status_id | int(11)  | YES |  | NULL |    | 
| image_id   | bigint(20) | YES |  | NULL |    | 
| mfg_id    | int(11)  | YES |  | NULL |    | 
| shipping   | decimal(10,2) | YES |  | NULL |    | 
| price    | decimal(10,2) | YES |  | NULL |    | 
| points    | decimal(10,2) | YES |  | NULL |    | 
| tax_class_id  | int(11)  | YES |  | NULL |    | 
| weight    | decimal(10,2) | YES |  | NULL |    | 
| width    | decimal(10,2) | YES |  | NULL |    | 
| length    | decimal(10,2) | YES |  | NULL |    | 
| height    | decimal(10,2) | YES |  | NULL |    | 
| viewed    | int(11)  | YES |  | NULL |    | 
| date_used   | datetime  | YES |  | NULL |    | 
| date_added   | datetime  | YES |  | NULL |    | 
| date_modified  | datetime  | YES |  | NULL |    | 
| date_available  | datetime  | YES |  | NULL |    | 
| sellor_id   | int(11)  | YES |  | NULL |    | 
| sellor_product_id | varchar(80) | YES |  | NULL |    | 
| state_codes  | text   | YES |  | NULL |    | 
| ground_ship_only | varchar(1) | YES |  | n  |    | 
| adult_sig_req  | varchar(1) | YES |  | n  |    | 
| no_drop_ship  | varchar(1) | YES |  | n  |    | 
| priority   | int(3)  | YES |  | NULL |    | 
| unlimited_stock | varchar(1) | YES |  | NULL |    | 
| reorder_level  | int(11)  | YES |  | NULL |    | 
| license_key  | text   | YES |  | NULL |    | 
| store_cost   | decimal(10,2) | YES |  | NULL |    | 
| msrp    | decimal(10,2) | YES |  | NULL |    | 
| handling_cost  | decimal(10,2) | YES |  | NULL |    | 
| min_order_quantity | int(11)  | YES |  | NULL |    | 
| max_order_quantity | int(11)  | YES |  | NULL |    | 
| weight_major  | decimal(10,2) | YES |  | NULL |    | 
| weight_minor  | decimal(10,2) | YES |  | NULL |    | 
| warehouse   | text   | YES |  | NULL |    | 
| shipping_msg  | text   | YES |  | NULL |    | 
| category_special | varchar(1) | YES |  | NULL |    | 
| homepage_special | varchar(1) | YES |  | NULL |    | 
| shipping_option | text   | YES |  | NULL |    | 
| product_type  | text   | YES |  | NULL |    | 
| related_products | mediumtext | YES |  | NULL |    | 
| product_url  | text   | YES |  | NULL |    | 
| enable_flag  | varchar(1) | YES |  | NULL |    | 
| purchasable  | varchar(1) | YES |  | NULL |    | 
| price_msg   | text   | YES |  | NULL |    | 
| in_stock_msg  | text   | YES |  | NULL |    | 
| out_of_stock_msg | text   | YES |  | NULL |    | 
| variations   | text   | YES |  | NULL |    | 
| attributes   | text   | YES |  | NULL |    | 
| delete_flag  | varchar(1) | YES |  | NULL |    | 
| short_desc   | text   | YES |  | NULL |    | 
| cross_ref   | text   | YES |  | NULL |    | 
| model_no   | varchar(40) | YES |  | NULL |    | 
| pkg_qty   | int(11)  | YES |  | 1  |    | 
| military_spec  | varchar(40) | YES |  | NULL |    | 
| grips    | varchar(80) | YES |  | NULL |    | 
+--------------------+---------------+------+-----+---------+----------------+ 
+2

4096 colums не является номером исправления. Фактическое число зависит от размера строки. Подробнее читайте здесь: http://dev.mysql.com/doc/refman/4.1/en/column-count-limit.html – andrew

+0

** Каждая таблица имеет максимальный размер строки 65 535 байт. Этот максимум применяется ко всем механизмам хранения, но у данного механизма могут быть дополнительные ограничения, которые приводят к более низкому эффективному максимальному размеру строки. ** (Тот же источник, что и @andrew, но я не обновлялся, чтобы увидеть его комментарий ^^) – Naruto

+0

Возможно, вы может выжать еще несколько байтов из ваших столбцов, используя более качественные типы. Ваши флаги можно изменить с 'varchar (1)' на 'char (1)' или даже лучше 'tinyint'. Я думаю, что текст и подобные типы arent считаются, поскольку они хранятся в специальном магазине. – ToBe

ответ

0

Я подозреваю, что ваш enable_flag может иметь и другие символы. Вы можете выяснить это с помощью information_schema.columns:

select concat('"', c.column_name, '"') 
from information_schema.columns c 
where table_name = 'products' and column_name like '%enable%'; 

Если вы нашли дополнительные символы, вы, вероятно, понадобится кавычку.

+0

'select length (c.column_name)' будет работать тоже. должен вернуться как 11, если нет никаких невидимых символов. –

+0

Нет - но хорошая идея. :-) Я уже проверял это как возможность. Я пытаюсь поймать все «я чувствую себя такими глупыми» вещами. НЕ, что я всегда их нахожу, но я пытаюсь их найти. Теперь он переключился с enable_flag на license_option. Я, вероятно, сделал что-то немое с этим. В основном потому, что я несколько раз модифицировал команду, пытаясь найти ошибку, я, вероятно, ввел другую ошибку. Тьфу. –

1

В этом случае проблема заключалась в том, что база данных запуталась в том, что я действительно хотел сделать. Существует только одна таблица «продуктов», поэтому база данных не должна путаться - но это так. Решение состоит в том, чтобы добавить имя базы данных в команду, чтобы не было путаницы. Таким образом, команда должна быть:

update store.products where enable_flag='Y' where prod_id=31750 

Размещая «магазин» часть по команде, то database.table соединение затем установлено и поле найдено.

+0

OK! Время для «Просто КАК тупой ты?» вопросов. :-) Оказывается, что на линии Mysqli, где вы открываете связь с базой данных, у меня была база данных A на этой строке вместо базы данных «store», поэтому mysql пытался писать в несуществующее поле. Проблемы с работой с несколькими базами данных на нескольких машинах.Итак, реальный ответ - убедитесь, что вы работаете с базой данных, с которой вы СЧИТАЛИ, что работаете. Тьфу. Я чувствую себя таким глупым. –

Смежные вопросы