【问题标题】:MySQL Order by boolean value tinyintMySQL 按布尔值 tinyint 排序
【发布时间】:2013-09-25 09:50:49
【问题描述】:

我正在使用 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 订购)还是应该提交错误报告?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      你可以用反引号,

      ORDER BY `read' ASC
      

      【讨论】:

        【解决方案3】:

        除了@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
        

        【讨论】:

        • 实际代码使用反引号,这是一个错字。感谢“看到”的建议,我实际上一直在努力寻找一个好的重命名!
        猜你喜欢
        • 1970-01-01
        • 2011-11-25
        • 1970-01-01
        • 1970-01-01
        • 2020-12-10
        • 2011-04-14
        • 1970-01-01
        • 1970-01-01
        • 2016-02-20
        相关资源
        最近更新 更多