beldmit: (Программизм)
[personal profile] beldmit
Коллега сегодня обнаружил, что при сортировке в уникодной локали PostgreSQL выдаёт записи в таком порядке:

_a
a
_c
d

что несколько контринтуитивно.

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

Вылечилось это привешиванием COLLATE "C" на искомую колонку, который даёт сравнение, грубо говоря, побайтовое. Но вообще поведение документированное, но неочевидное.

Date: 2017-12-04 07:11 pm (UTC)
nataraj: (Default)
From: [personal profile] nataraj
Там вообще жесть...
Есть еще что-то вроде

"а а"
"а (б)"
"а в"

(пишу по памяти, может быть не правильно запомнил конкретику)

И в некоторых случаях непонятны две вещи:
а) как сделать так чтобы сортировалось как надо
б) как сделать так чтобы везде сортировалось одинаково

Date: 2017-12-04 09:01 pm (UTC)
elglin: (Default)
From: [personal profile] elglin
Забавное совпадение - буквально вчера читал главу из мануала про AWK, где всячески подчеркивалась важность COLLATE "C" для многих приложений.

Date: 2017-12-05 04:37 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan
Ну, по UCA они не то чтобы игнорируются, просто выступают tiebreaker’ом четвёртого приоритета.

Date: 2017-12-05 07:31 am (UTC)
gegmopo4: (Default)
From: [personal profile] gegmopo4
И чем плох такой порядок?

Profile

beldmit: (Default)
Dmitry Belyavskiy

December 2025

S M T W T F S
 123456
78910111213
14151617181920
2122 2324252627
28 29 3031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 4th, 2026 10:18 pm
Powered by Dreamwidth Studios