Bil*_*soe 1 postgresql sql-order-by
我正在尝试在SQL查询工作中创建一个"order by"语句.但由于某些原因,丹麦的特殊角色被扩大,而不是评估它们的价值.
SELECT roadname FROM mytable ORDER BY roadname
Run Code Online (Sandbox Code Playgroud)
结果:
中间的结果应该是最后的结果.
语言环境设置为丹麦语,因此它应该知道丹麦语特殊字符的值.
您的数据库的整理是什么?(您可能还想提供您正在使用的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/collation.html
| 归档时间: |
|
| 查看次数: |
448 次 |
| 最近记录: |