Postgresql命令 - 丹麦语字符被扩展

Bil*_*soe 1 postgresql sql-order-by

我正在尝试在SQL查询工作中创建一个"order by"语句.但由于某些原因,丹麦的特殊角色被扩大,而不是评估它们的价值.

SELECT roadname FROM mytable ORDER BY roadname
Run Code Online (Sandbox Code Playgroud)

结果:

  • Abildlunden
  • Æblerosestien
  • Agern Alle 1

中间的结果应该是最后的结果.

语言环境设置为丹麦语,因此它应该知道丹麦语特殊字符的值.

ara*_*nid 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)
Run Code Online (Sandbox Code Playgroud)

从您当时设置的语言环境创建数据库集群时,将设置数据库排序规则.如果您通过包管理器(例如apt-get)安装了PostgreSQL,那么它很可能来自系统默认的语言环境.

您可以覆盖特定列中使用的排序规则,甚至可以覆盖特定表达式中的排序规则(如上面的示例所示).但是,如果您未指定任何内容(可能),则将使用数据库缺省值(在创建数据库时,它本身将从模板数据库继承,并且在创建集群时修复模板数据库归类)

如果您希望da_DK始终使用默认排序规则,并且它当前不是您的数据库默认值,那么最简单的选项可能是转储数据库,然后删除并重新创建群集,指定排序规则initdb(或者pg_createcluster您使用的任何工具)创建服务器)

顺便说一句,这个问题没有得到很好的表达.PostgreSQL非常不忽视"特殊"字符,它正确地将"Æ"扩展为"AE" - 这是英语的正确规则.最后整理"Æ"实际上更像是非本地化行为.

整理文档:http://www.postgresql.org/docs/current/static/collat​​ion.html