【发布时间】:2015-07-20 23:34:15
【问题描述】:
我有下表(在 Oracle 和 PostgreSQL 中创建并填充它们):
> create table foo (a varchar(10));
我用值填充它们,order by 子句在 PostgreSQL 和 Oracle 中的行为不同(我认为版本与这个问题无关):
甲骨文:
> select a, length(a) from foo order by a;
A LENGTH(A)
---------- ----------
.1 2
01 2
1 1
1#0 3
1#1 3
1.0 3
1.1 3
10 2
11 2
9 rows selected.
我得到了我的期望。 .1 在 01 之前,因为 . 在 ascii 表中在 0 之前。
但是,在 PostgreSQL 中我有:
=> select a, length(a) from foo order by a;
a | length
-----+--------
01 | 2
1 | 1
.1 | 2
10 | 2
1.0 | 3
1#0 | 3
11 | 2
1.1 | 3
1#1 | 3
(9 rows)
为什么不一样?我知道这可能与整理顺序或类似内容有关,但我想知道在哪里可以阅读更多相关信息。
更新:整理 PostgreSQL 数据库的信息:
Encoding: UTF8
Collante: en_US.UTF-8
Ctype: en_US.UTF-8 |
谢谢!
【问题讨论】:
-
不同的排序规则?看起来 PostgreSQL 忽略了符号,这可以解释行为(因为没有任何符号的值是有序的)。
-
在查询中使用
COLLATE "POSIX"会改变PgSQL结果吗? -
@user2864740 是的,是的。
标签: oracle postgresql sql-order-by