我正在尝试在sql查询工作中创建一个“order by”语句。但由于某种原因,丹麦人的特殊性格被扩大,而不是评估他们的价值。
SELECT roadname FROM mytable ORDER BY roadname
结果:
中间的结果应该是最后一个。
语言环境设置为丹麦语,因此它应该知道丹麦语特殊字符的值。
答案 0 :(得分:6)
您的数据库的整理是什么? (您可能还想提供您正在使用的PostgreSQL版本)使用psql中的“\ l”来查看。
比较和对比:
steve@steve@[local] =# select * from (values('Abildlunden'),('Æblerosestien'),('Agern Alle 1')) x(word)
order by word collate "en_GB";
word
---------------
Abildlunden
Æblerosestien
Agern Alle 1
(3 rows)
steve@steve@[local] =# select * from (values('Abildlunden'),('Æblerosestien'),('Agern Alle 1')) x(word)
order by word collate "da_DK";
word
---------------
Abildlunden
Agern Alle 1
Æblerosestien
(3 rows)
从您当时设置的区域设置创建数据库群集时,将设置数据库归类。如果您通过包管理器(例如apt-get)安装了PostgreSQL,那么它很可能来自系统默认的语言环境。
您可以覆盖特定列中使用的排序规则,甚至可以覆盖特定表达式中的排序规则(如上面的示例所示)。但是,如果您未指定任何内容(可能),则将使用数据库默认值(在创建数据库时,它本身将从模板数据库继承,并且在创建集群时修复模板数据库排序规则)
如果要始终使用da_DK
作为默认排序规则,并且它当前不是您的数据库默认值,则最简单的选项可能是转储数据库,然后删除并重新创建群集,指定排序规则到initdb
(或pg_createcluster
或您用来创建服务器的任何工具)
整理文档:http://www.postgresql.org/docs/current/static/collation.html