如何在 PostgreSQL 中按 Unicode 排序?

问题描述 投票:0回答:1

我正在使用 PostgreSQL 16,我的专栏是 en_US.utf8,如下所示:

create table t (a varchar(10) collate "en_US.utf8");

insert into t (a) values ('a'), ('b'),('{a'), ('{b'),
  ('{a{a'), ('{a{b'), ('{aa'), ('{ab');

然后,如果我按“a”列排序:

select * from t order by a;

我得到:

{a
a
{a{a
{aa
{a{b
{ab
{b
b

我期待“a”在“{a”之前,因为“a”的代码点是97,而“{”的代码点是123。

我需要使用不同的排序规则来进行 Unicode 排序吗?

我的用例使用较长的字符串,但我认为这个简单的示例说明了我遇到的问题。

sql database postgresql sorting unicode
1个回答
0
投票

要按编码的字节值排序,请使用

COLLATE "C"
。对于其他排序规则,如
en_US.utf8
,字节值大多无关紧要。
说明书:

C
(相当于
POSIX

C
POSIX
排序规则基于“传统 C”行为。它们按字节值而不是自然语言顺序排序, 并且只有 ASCII 字母“
A
”到“
Z
”被视为字母。 对于给定的所有版本,该行为都是高效且稳定的 数据库编码,但不同数据库之间的行为可能有所不同 编码。

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.