我正在使用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订购)或者我应该提交错误报告吗?
答案 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