我有一个使用 da_DK.utf8 语言环境创建的 PostgreSQL 8.4 数据库。
dbname=> show lc_collate;
lc_collate
------------
da_DK.utf8
(1 row)
当我从表中选择一些东西时,我在字符变化列上排序时,我得到了一个奇怪的行为 IMO。在排序结果时,PostgreSQL 会忽略值前缀的破折号,例如:
select name from mytable order by name asc;
可能会返回类似的东西
name
----------------
Ad...
Ae...
Ag...
- Ak....
At....
破折号前缀似乎被忽略了。
我可以通过在订购时将列转换为 latin1 来解决此问题:
select name from mytable order by convert_to(name, 'latin1') asc;
我得到了预期的结果:
name
----------------
- Ak....
Ad...
Ae...
Ag...
At....
为什么默认情况下会忽略破折号前缀?这种行为可以改变吗?