2013-09-25 145 views
2

我正在使用mysql Ver 14.14 Distrib 5.5.31,用於debian-linux-gnu(x86_64)。MySQL按照布爾值排序tinyint

此查詢失敗,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列是由軌道的ActiveRecord接口以存儲布爾值產生的TINYINT(1)值。

當切換到postgresql時,同樣的動作工作,但我目前無法訪問pg生成的查詢。 實際查詢有問題嗎? (也許我不能通過tinyint訂購)還是應該提交錯誤報告?

回答

1

問題是「讀」是MySQL中的關鍵字。這是更好,如果你能避免使用保留字列標識符

你可以用反引號使用它,

ORDER BY `read' ASC 
1

除了@納文的回答,你需要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 
+1

實際的代碼使用反引號,這是一個錯字。感謝「看到」的建議,我實際上一直在試圖找到一個好的重命名! –

相關問題