我无法在mysql中选择查询表,但只能使用某些名称

时间:2013-05-20 02:41:22

标签: mysql web.py

我在名为19efdf22eeefaa6dc322be094bb2da475d4d457c8e0b5a906b375bc5f6c44ca4274d7374ea43435a的数据库中有几个表。

当我运行代码时

SELECT * 
FROM table_name
ORDER BY name ASC

table_name是上述表格之一,查询在第二个表上失败但在第一个表上失败,我不知道为什么。

这似乎是随机发生的,我发现如果我用“`”(严重标记)包围表名,那么它工作正常,但我使用web.py作为我的Web框架并且有一些有用的包含插入和选择的简单查询的包装器。

我使用Python哈希函数生成这些字符串,但它们几乎完全相同(不同,不过相同,但都相似)。

2 个答案:

答案 0 :(得分:3)

我也不确定,但你应该在每个标识符周围加上反引号:

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

MySQL以这种方式理解围绕数据库名称,表名和列名的反引号。这是一个旧网址,确实建议你做了什么:http://mail.python.org/pipermail/db-sig/2007-August/005172.html

您可以在\x60(反引号)之前和之后插入表名。请原谅我,我不熟悉Python。

更新2013-05-20 22:08 EDT

这是我的猜想:前两个字符(如果被视为十六进制值)小于128,我认为information_schema.tables的字符集可能会干扰表名的解释。您必须尝试前两个字符小于或等于7F的表名。了解这种情况的唯一方法是添加Python代码,如果前两个字符(以十六进制值表示)大于7F,则再次重试SHA1哈希。

试一试!!!

答案 1 :(得分:0)

在MySQL中,名称以数字0-9开头的表只能用反引号访问。

我建议一个简单的修复 - 用“_”前缀表名