mysql - 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)
没有指定特定的排序规则,所以我认为它们使用的是默认值。
我已经尝试过使用和不使用索引,并且在索引上尝试了几种类型的排序规则,但仍然得到相同的结果。
我不确定如何调试它。
解决方案
使用字节顺序
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<>在这里摆弄
推荐阅读
- python - Why does my loop only return one answer instead of answers for the entire list?
- javascript - 在 Javascript 中,如何执行返回对象并将该对象附加到不同的 js 文件的函数?
- c# - 将 JavaScript 对象解析为 C# 的问题
- vba - 使用图像以另一种形式打开记录
- java - 在 Extents Report 的 test.log() 中统计项目并打印
- ios - 滚动视图中的堆栈视图不滚动
- c++ - 调试我的代码时,变量在调试窗口中未正确显示其值
- c++ - 在长时间运行的点击按钮功能(插槽)中更新 QLabel(多次)
- mysql - 定义了多个主键
- reactjs - 当我点击这个不同的表头时,我有一个反应表试图让它排序