首页 > 解决方案 > PostgreSQL 排序对空白的优先级与 Mongo 和 MySQL 不同

问题描述

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

Pazyn Qhhbltw Vxsnwgt
Pazynkfc Tttzqjss Zzpxuarhy

Mongo 和 MySQL 都按照上面显示的顺序对它们进行排序,但 Postgres 会切换它们。似乎Mongo 和 MySQL 都认为空格字符在“k”之前,但 Postgres 在它之后。

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

我正在使用 Postgres 版本 10.10 和 MySQL 8.0.18。

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

我已经尝试过使用和不使用索引,并且在索引上尝试了几种类型的排序规则,但仍然得到相同的结果。

我不确定如何调试它。

标签: mysqlmongodbpostgresql

解决方案


使用字节顺序

ORDER BY texta::bytea;
CREATE TABLE  temp (
id INTEGER 
,texta varchar(50)
)
INSERT INTO temp VALUES (1,'Pazyn Qhhbltw Vxsnwgt'),
(2,'Pazynkfc Tttzqjss Zzpxuarhy')
2 行受影响
SELECT * FROM temp ORDER BY texta;
编号 | 文本                      
-: | :----------------------------
 2 | Pazynkfc Tttzqjss Zzpxuarhy
 1 | Pazyn Qhhbltw Vxsnwgt      
SELECT * FROM temp ORDER BY texta::bytea;
编号 | 文本                      
-: | :----------------------------
 1 | Pazyn Qhhbltw Vxsnwgt      
 2 | Pazynkfc Tttzqjss Zzpxuarhy
SELECT * FROM temp;
编号 | 文本                      
-: | :----------------------------
 1 | Pazyn Qhhbltw Vxsnwgt      
 2 | Pazynkfc Tttzqjss Zzpxuarhy

db<>在这里摆弄


推荐阅读