【发布时间】:2019-09-18 05:11:38
【问题描述】:
这让我发疯了。我的 Heroku Postgres (9.5.18) DB 在排序结果时似乎忽略了下划线:
查询:
SELECT category FROM categories ORDER BY category ASC;
结果:
category
-------------------
z_commercial_overlay
z_district
zr_use_group
zr_uses_footnote
z_special_district
这对我来说是新的。我从来没有注意到另一个系统在排序时不尊重下划线,这是我第一次注意到 Postgres 有这样的行为。
在我的本地 OSX 机器(Postgres 10.5)上,结果按“正常”预期方式排序:
category
-------------------
z_commercial_overlay
z_district
z_special_district
zr_use_group
zr_uses_footnote
更新:
基于 cmets,我能够通过使用 COLLATE "C" 得到正确的排序
SELECT category FROM categories ORDER BY category COLLATE "C" ASC;
但我不明白为什么这是必要的。两个 Postgres 实例都显示相同的默认排序规则值,并且所有表列都以相同的方式创建,没有指定备用排序规则。
SHOW lc_collate;
lc_collate
-------------
en_US.UTF-8
SHOW lc_ctype;
lc_ctype
-------------
en_US.UTF-8
那么为什么 Heroku Postgres DB 需要 COLLATE 声明?
【问题讨论】:
-
查看我的更新...
标签: postgresql heroku-postgres