admin

如何在PostgreSQL中以正确的顺序返回记录

sql

询问

select 'T' union all select 'Z'  order by 1

退货

Z
T

但是正确的顺序应该是

T
Z

尝试了3种不同的操作系统

  • Windows 2003服务器“ PostgreSQL 9.1.3,由Visual C ++ build 1500编译,32位”
  • Windows 7“ PostgreSQL 9.2.1,由Visual C ++ build 1600编译,32位”
  • Debian“ x86_64-unknown-linux-gnu上的PostgreSQL 9.1.2,由gcc-4.4.real编译(Debian 4.4.5-8)4.4.5,64位”

数据库设置为:

Collation:      et_EE.UTF-8 
Character type: et_EE.UTF-8

如何解决这个问题?

更新

使用以下数据库创建数据库

CREATE DATABASE mydb WITH TEMPLATE=template0 OWNER=mydb_owner ENCODING='UNICODE'

在所有情况下,操作系统语言环境均为爱沙尼亚语,因此在爱沙尼亚语语言环境中创建了数据库。

select 'Z' collate "et_EE" union all select 'S' collate "et_EE" order by 1

返回正确的顺序:

S
Z

select 'Z' collate "et_EE" union all select 'T' collate "et_EE" order by 1

如答案中所述,返回无效顺序:

Z
T

阅读 177

收藏
2021-06-07

共1个答案

admin

原始SQL没什么问题。

之所以无法使用预期的方式,是因为您使用的是爱沙尼亚语言环境,但是爱沙尼亚的整理规则要求“
Z”在“ T”之前。

您可以使用其他排序规则,也可以在en_US.UTF-8语言环境中创建数据库。

2021-06-07