2015-02-24 94 views
0

我一直在編寫代碼並在我遇到此錯誤時測試它。錯誤(1054):'field_list'中的未知列'enable_flag'

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

表中列出了「enable_flag」字段。我已經嘗試了上述SQL命令的幾種變體。我已經在「產品」周圍反覆提示,圍繞「enable_flag」,我嘗試重新輸入命令 - 一切都無濟於事。我甚至認爲我可能超過了65,536個字符的長度限制 - 但不是。所以我來到這裏,閱讀其他人有類似的問題,但這些都是「你打錯了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 2015-02-24 14:51:37

+0

**每個表的最大行大小爲65,535字節。這個最大值適用於所有的存儲引擎,但是給定的引擎可能會有額外的約束,導致有效的最大行大小。**(與@andrew相同的源代碼,但我沒有刷新以查看他的評論^^) – Naruto 2015-02-24 14:53:22

+0

也許你可以通過使用更好的類型從列中擠出更多字節。您的標誌可以從'varchar(1)'更改爲'char(1)',甚至更好'tinyint'。我認爲文字和類似的文字不會計算在特殊商店中。 – ToBe 2015-02-24 14:55:16

回答

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。 – 2015-02-24 14:59:05

+0

不,但好主意。 :-)我已經檢查過這種可能性。我試圖抓住所有的「我覺得很愚蠢」的東西。不是我總是找到他們 - 但我確實試圖找到他們。現在它已經從enable_flag切換到license_option。我可能已經做了一些愚蠢的事情。主要是因爲我修改了這個命令很多次,試圖找到我可能引入了另一個錯誤的錯誤。啊。 – 2015-02-24 15:25:55

1

在這種情況下,問題是數據庫變得困惑我實際上想做的事情。只有一個「產品」表,所以數據庫不應該變得困惑 - 但它確實如此。解決方案是將數據庫的名稱添加到命令中,以免混淆。所以,命令應該是:

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

通過將「店」的部分上的命令時,database.table連接,然後建立與現場發現。

+0

好的!時間「你是多麼愚蠢?」的問題。 :-)事實證明,在你打開與數據庫通信的Mysqli行上,我在那行有數據庫A而不是「存儲」數據庫,所以mysql試圖寫入一個不存在的字段。在多臺機器上處理多個數據庫的問題。所以真正的答案是 - 確保您正在使用您認爲正在使用的數據庫。啊。我覺得很愚蠢。 – 2015-02-25 15:39:28

相關問題