【发布时间】:2016-02-20 14:21:22
【问题描述】:
在 Mac 上使用 postgresql,我试图按降序排列名称,但我注意到如果这两个名称的第一个字母相同,它在尝试排序时不会检查第二个字母。
例如,假设您有以下字符串:
Amen, Alia, Atis,...etc
理想情况下,它们应按以下顺序排列:
Alia, Amen, Atis,..etc
但是 postgresql 只检查第一个字母,似乎没有检查整个字符串。因此postgresql返回的名字顺序是:
Atis, Alia, Amen,..etc
或者只是一些随机的顺序。我已将数据库排序规则设置为 en_us.utf8。
我尝试使用的简化查询是:
SELECT name
FROM properties
ORDER BY name;
如何按整个字符串对 postgresql 进行排序,这可能吗?
更新: 当我在pgadmin III中尝试查询时,我发现它产生了相同的结果,我认为这可能与postgreSQL的配置有关。
我的 db 配置是: 排序规则和字符类型为:en_CA.UTF-8 表空间:pg_default
我在mac上设置的配置有问题吗?
【问题讨论】:
-
@klin 查询是:SELECT name FROM properties LEFT OUTER JOIN 观察(properties.id =observations.id)order by name desc
-
Postgres 确实按所有字母排序(整个列内容)。你检查大写字母了吗? “AZ”比“Aa”先出现。另外,将您的查询添加到问题中。
-
@ChristianB.Almeida 在应用查询之前,所有名称都转换为小写字母,但相同的查询在 windows 上有效,但在 mac 上似乎无效。我不确定它是否与 postgresql 的版本或排序规则有关。
-
这可能是排序规则的问题。要确定是否如此,请尝试
SELECT name FROM properties ORDER BY name COLLATE "C" -
@klin 我已经尝试过您建议的查询,但它仍然包含不正确的顺序,例如降序或升序,它将“测试”放在“钣金”之前。我不知道该选择哪种排序规则?
标签: java postgresql