MySQL按布尔值tinyint排序

时间:2013-09-25 09:50:49

标签: mysql sql ruby-on-rails postgresql innodb

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

此查询失败并显示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列是由Rails ActiveRecord接口生成的TINYINT(1)值,用于存储布尔值。

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

问题是“read”是mysql中的关键字。最好不要使用保留字来表示列标识符

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

ORDER BY `read' ASC

答案 2 :(得分:1)

除了@naveen的回答,您还需要change your single quotation marks into backticks

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

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

ALTER TABLE messages CHANGE read seen TINYINT