PostgreSQL排序对空白的优先级与Mongo和MySQL不同



我比较了几个数据库的速度,处理了一些随机生成的字符串,奇怪地注意到排序不同。我正在处理数千行,但为了简单起见,我将数据隔离为以下两个字符串:

Pazyn Qhhbltw Vxsnwgt
Pazynkfc Tttzqjss Zzpxuarhy

Mongo和MySQL都按照上面显示的顺序对它们进行排序,但Postgres将它们切换。看起来Mongo和MySQL都认为空格字符在"k"之前是,但Postgres认为是在它之后。

如何让Postgres融入MySQL和Mongo并与之保持一致?

我使用的是Postgres10.10和MySQL 8.0.18版本。

这两列都是varchar(32),没有指定特定的排序规则,所以我认为它们使用默认排序规则。

我尝试过带索引和不带索引,也尝试过几种类型的索引排序规则,但仍然得到了相同的结果。

我不知道如何调试它。

使用字节顺序

ORDER BY texta::bytea;
CREATE TABLE  temp (
id INTEGER 
,texta varchar(50)
)
<blockquote\
INSERT INTO temp VALUES (1,'Pazyn Qhhbltw Vxsnwgt'),
(2,'Pazynkfc Tttzqjss Zzpxuarhy')
>
2行受影响
SELECT * FROM temp ORDER BY texta;
id|texta-:|:--------------------------2|Pazynkfc Tttzqjss Zzpxuarhy1|Pazyn Qhhbltw Vxsnwgt
SELECT * FROM temp ORDER BY texta::bytea;
id|texta-:|:--------------------------1|Pazyn Qhhbltw Vxsnwgt2|Pazynkfc Tttzqjss Zzpxuarhy
SELECT * FROM temp;
id|texta-:|:--------------------------1|Pazyn Qhhbltw Vxsnwgt2|Pazynkfc Tttzqjss Zzpxuarhy

db<>小提琴这里

最新更新