2

我正在为 debian-linux-gnu (x86_64) 使用 mysql Ver 14.14 Distrib 5.5.31。

此查询失败并显示一条You have an error in your SQL syntax[...]near 'read ASC'消息:

SELECT 'messages'.* FROM 'messages' WHERE 'messages'.'user_id' = 2 ORDER BY read ASC;

其中read列是TINYINT(1)Rails ActiveRecord 接口生成的用于存储布尔值的值。

切换到 postgresql 时相同的操作有效,但我目前无法访问 pg 生成的查询。实际查询有问题吗?(也许我不能通过 tinyint 订购)还是应该提交错误报告?

4

3 回答 3

3

读取是mysql中的保留关键字 http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-5.html

您必须在查询中添加“读取”ASC

于 2013-09-25T09:55:16.250 回答
1

问题是“read”是mysql中的一个关键字。最好避免对列标识符使用保留字

您可以将它与反引号一起使用,

ORDER BY `read' ASC
于 2013-09-25T09:57:45.060 回答
1

除了@naveen 的回答,您还需要将单引号更改为反引号

SELECT `messages`.* FROM `messages` WHERE `messages`.`user_id` = 2 ORDER BY read ASC;

更好的是,不要使用 MySQL 保留字作为列名。要更改名称,请使用ALTER

ALTER TABLE messages CHANGE read seen TINYINT
于 2013-09-25T09:58:33.027 回答