Unicode, сортировки, а я маленький такой
Dec. 4th, 2017 08:07 pmКоллега сегодня обнаружил, что при сортировке в уникодной локали PostgreSQL выдаёт записи в таком порядке:
_a
a
_c
d
что несколько контринтуитивно.
Вскрытие показало, что алгоритм сравнения в Unicode довольно хитровывернутый в этом месте. При сортировке в локали базы в итоге символы подчёркивания игнорируются.
Вылечилось это привешиванием COLLATE "C" на искомую колонку, который даёт сравнение, грубо говоря, побайтовое. Но вообще поведение документированное, но неочевидное.
_a
a
_c
d
что несколько контринтуитивно.
Вскрытие показало, что алгоритм сравнения в Unicode довольно хитровывернутый в этом месте. При сортировке в локали базы в итоге символы подчёркивания игнорируются.
Вылечилось это привешиванием COLLATE "C" на искомую колонку, который даёт сравнение, грубо говоря, побайтовое. Но вообще поведение документированное, но неочевидное.
no subject
Date: 2017-12-04 07:11 pm (UTC)Есть еще что-то вроде
"а а"
"а (б)"
"а в"
(пишу по памяти, может быть не правильно запомнил конкретику)
И в некоторых случаях непонятны две вещи:
а) как сделать так чтобы сортировалось как надо
б) как сделать так чтобы везде сортировалось одинаково
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2017-12-04 09:01 pm (UTC)no subject
Date: 2017-12-05 04:37 am (UTC)(no subject)
From:no subject
Date: 2017-12-05 07:31 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: