【问题标题】:String comparison in SQL query on Heroku PostgresHeroku Postgres 上 SQL 查询中的字符串比较
【发布时间】:2013-12-26 07:39:08
【问题描述】:

我昨天看到 Heroku Postgres 的奇怪行为。当我执行此 sql 查询以进行字符串比较时:

SELECT ('2013/12-25' <= '2013/12/')

我的开发机器(9.2.3,Mac OS X Mavericks)上的 Postgres 返回 true(这是正确的),而 Heroku(9.2.4)上的 Postgres 返回 false !!!

有谁知道如何解决这个问题?

【问题讨论】:

    标签: sql string postgresql heroku comparison


    【解决方案1】:

    似乎这两个 Postgresql 实例 [在服务器配置中具有不同的默认 COLLATIONS (http://www.postgresql.org/docs/9.3/static/collation.html):

    尝试检查此命令是否在两台服务器上输出相同的结果:

    show lc_collate
    

    对于您的示例,不同的排序规则可以显示不同的结果。例如:

    SELECT (('2013/12-25' COLLATE "en_US") <= ('2013/12/' COLLATE "en_US"))
    UNION ALL
    SELECT (('2013/12-25' COLLATE "ko_KR") <= ('2013/12/' COLLATE "ko_KR"))
    

    SQLFiddle demo

    【讨论】:

    • 似乎两者都有排序规则“en_US.UTF-8”。当我尝试运行以下查询时: SELECT (('2013/12-25' COLLATE "en_US.UTF-8") ,我的机器返回 true 但 Heroku Postgres 出错了。有什么想法吗?
    • @AnhNguyen 什么错误?
    • 错误:用于编码“UTF8”的排序规则“en_US.UTF-8”不存在第 1 行:SELECT (('2013/12-25' COLLATE "en_US.UTF-8")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2017-03-28
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多