0

19efdf22eeefaa6dc322be094bb2da475d4d457c我在名为and的数据库中有几个表8e0b5a906b375bc5f6c44ca4274d7374ea43435a

当我运行代码时

SELECT * 
FROM table_name
ORDER BY name ASC

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

这似乎是随机发生的,我发现如果我用“`”(坟墓标记)将表名括起来,那么它工作得很好,但是我将 web.py 用于我的 web 框架,并且有一些有用的包装器很容易涉及插入和选择的查询。

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

4

2 回答 2

3

我也不确定,但是您应该像这样在每个标识符周围加上反引号:

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

MySQL 以这种方式理解数据库名、表名和列名周围的反引号。这是一个旧 URL,确实建议您这样做: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 代码,如果前两个字符(以十六进制值表示)大于 ,则再次重试 SHA1 哈希7F

试试看 !!!

于 2013-05-20T02:50:30.280 回答
1

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

我建议一个简单的修复 - 在表名前加上 "_" 。

于 2013-12-28T11:05:50.260 回答