我比较了几个数据库的速度,处理了一些随机生成的字符串,奇怪地注意到排序不同。我正在处理数千行,但为了简单起见,我将数据隔离为以下两个字符串:
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;
<blockquote\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;
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<>小提琴这里