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

时间:2012-12-17 08:52:51

标签: postgresql sql-order-by

我正在尝试在sql查询工作中创建一个“order by”语句。但由于某种原因,丹麦人的特殊性格被扩大,而不是评估他们的价值。

SELECT roadname FROM mytable ORDER BY roadname

结果:

  • Abildlunden
  • Æblerosestien
  • Agern Alle 1

中间的结果应该是最后一个。

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

1 个答案:

答案 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或您用来创建服务器的任何工具)

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

整理文档:http://www.postgresql.org/docs/current/static/collation.html