PostgreSQL сортирует приоритеты пробелов в отличие от понедельника go и MySQL - PullRequest
1 голос
/ 21 апреля 2020

Я сравнивал скорости нескольких баз данных, работал с некоторыми случайно сгенерированными строками и с любопытством заметил, что сортировка отличается. Я работаю с тысячами строк, но для простоты выделил свои данные только в эти 2 строки:

Pazyn Qhhbltw Vxsnwgt
Pazynkfc Tttzqjss Zzpxuarhy

Пн go и MySQL оба отсортировали их в порядке, указанном выше, но Postgres переключает их Кажется, что символ пробела считается до"k" как Mon go, так и MySQL, а после него - Postgres.

Как я могу получить Postgres в падении и соответствовать MySQL и Пн go?

Я использую Postgres версии 10.10 и MySQL 8.0.18.

Оба столбца varchar(32) без указания параметров сортировки c, поэтому я предполагаю, что они используют значение по умолчанию.

Я пробовал как с индексом, так и без него, и я попробовал несколько типов сортировки по индексу, но все же получил тот же результат.

Я не уверен, как это отладить.

1 Ответ

2 голосов
/ 21 апреля 2020

Использование порядок байтов

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 rows affected
SELECT * FROM temp ORDER BY texta;
id | texta                      
-: | :--------------------------
 2 | Pazynkfc Tttzqjss Zzpxuarhy
 1 | Pazyn Qhhbltw Vxsnwgt      
SELECT * FROM temp ORDER BY texta::bytea;
id | texta                      
-: | :--------------------------
 1 | Pazyn Qhhbltw Vxsnwgt      
 2 | Pazynkfc Tttzqjss Zzpxuarhy
SELECT * FROM temp;
id | texta                      
-: | :--------------------------
 1 | Pazyn Qhhbltw Vxsnwgt      
 2 | Pazynkfc Tttzqjss Zzpxuarhy

db <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...