Postgresql order 通过返回两个不同的命令

Postgresql order by returning two different orders

我有一个 PostgreSQL 测试版服务器 运行 和一个 运行 本地服务器。在两者上,我都有一个名为 profile 的 table,其中有一个名为 name 的列,类型为 character varying (255)。我检查过数据库是否具有相同的值。

奇怪的是,当我在 profile table 和 order by name asc 上执行 select 时,我得到了不同的结果。因此,在我的本地数据库中,名称为 (I)Contractor 的配置文件是第一个,而在测试版配置文件中,名称为 3B 的配置文件是第一个。

所以在我的本地数据库中,( 似乎出现在数字字符之前,反之亦然。知道这是怎么回事吗?不同版本的 Postgresql 排序规则会有所不同吗?

此行为的原因可能在于两台服务器 运行 在两个不同的操作系统上(例如 Gnu Linux 和 MS Windows)。排序方法的不同是由于排序规则是由操作系统提供的。要获得相同的排序顺序,您可以使用 collate:

select name from profile order by name collate "C"

另见