2013-05-20 27 views
0

我在名爲19efdf22eeefaa6dc322be094bb2da475d4d457c8e0b5a906b375bc5f6c44ca4274d7374ea43435a的數據庫中有一對錶。我不能在mysql中選擇查詢表,但只能使用某些名稱

當我運行代碼

SELECT * 
FROM table_name 
ORDER BY name ASC 

哪裏table_name是上面的表中的一個,查詢的第二個失敗,但不是第一位的,我不知道爲什麼。

這似乎是隨機發生的,我發現如果我用「`」(墳墓標記)圍住表名,那麼它工作得很好,但我使用web.py爲我的web框架,並且有一些有用的包裝容易涉及插入和選擇查詢。

我正在使用Python哈希函數生成這些字符串,但它們幾乎都是相同的(不一樣,可以說,但都是相似的)。

+0

你得到了什麼錯誤? – hexist

+0

@hexist我得到錯誤'1064,「你的SQL語法有錯誤;檢查對應於你的MySQL服務器版本的手冊,在第一行使用'8e0b5a906b375bc5f6c44ca4274d7374ea43435a ORDER BY name ASC' 。我知道這是因爲缺乏反引號,但如果我可以使用方便的函數而不是寫完整的查詢,我想。 –

回答

3

我也不清楚,但你應該把反引號周圍的每一個標識符是這樣的:

SELECT * 
FROM `table_name` 
ORDER BY `name` ASC 

MySQL的理解周圍的數據庫名,表名和字段名反引號這樣。這裏是一箇舊的URL,你的確如何推薦:http://mail.python.org/pipermail/db-sig/2007-August/005172.html

你可以在\x60(反引號)之前和之後插入表名。原諒我,我不熟悉Python。

UPDATE 2013年5月20日22:08 EDT

這是我的猜想:前兩個字符,如果採取的是十六進制值,小於128,我覺得對於INFORMATION_SCHEMA.TABLES字符集可能會干擾表名的解釋。您將不得不嘗試使用表名前兩個字符小於或等於7F。要知道是否是這種情況,唯一的方法是添加Python代碼,如果前兩個字符(根據十六進制值)大於7F,則會再次重試SHA1哈希。

試試吧!

+0

從公司名稱中選擇* ....不是我盒子上的問題 – Drew

+1

@DrewPierce根據http://dev.mysql.com/doc/refman/5.5/en/identifiers.html,反向引號可以用在任何標識符周圍,只要標識符是不超過64個字符。 – RolandoMySQLDBA

+0

點是名字似乎不被保留。再加上它們很難看,並且突出了小指! – Drew

0

在MySQL中,名稱以數字0-9開頭的表只能使用反引號進行訪問。

我建議一個簡單的修補程序 - 用「_」 預先指定表名。

相關問題