2013-05-20 25 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开头的表只能使用反引号进行访问。

我建议一个简单的修补程序 - 用“_” 预先指定表名。

相关问题