我有一个运行测试版的PostgreSQL
服务器和一个在本地运行的服务器。在两者上,我有一个名为profile
的表,其中一列名为name
,类型为character varying (255)
。我已经检查过dbs具有相同的值。
奇怪的部分是当我在profile
表格上选择order by name asc
时,我得到了不同的结果。因此,在我的本地数据库中,名为(I)Contractor
的个人资料是第一个,名为3B
的测试版个人资料是第一个。
所以我的本地数据库(
似乎出现在数字字符之前,反之亦然。知道这是怎么回事吗?对于不同版本的Postgresql,排序规则会有所不同吗?
答案 0 :(得分:1)
这种行为的原因可能在于两台服务器在两个不同的操作系统上运行(例如Gnu Linux和MS Windows)。排序方法的不同之处在于排序是由操作系统提供的。要获得相同的排序顺序,您可以使用collate
:
select name from profile order by name collate "C"
另见Different behaviour in “order by” clause: Oracle vs. PostgreSQL。