Wystarczy spojrzeć, proszę:PostgreSQL sortowania cyrylicznych "ь"
WITH toks AS (
SELECT tok
FROM
unnest('{ь, а, чь, ча, чль, чла}'::text[]) AS tok
ORDER BY tok COLLATE "uk_UA"
)
SELECT ROW_NUMBER() OVER() AS "#", tok FROM toks
ORDER BY tok COLLATE "uk_UA"
PostgreSQL 9.3 (ubuntu) daje mi ten wynik:
# | tok
---+-----
1 | а
2 | ча
3 | чль
4 | чла
5 | чь
6 | ь
(6 rows)
Oto wiersze 1, 2, 5 i 6 są posortowane prawidłowo ("Ń" idzie za "а"), podczas gdy wiersze 3 i 4 są posortowane nieprawidłowo ("" następuje po "ь").
Wszystkie litery są cyrylicą, sprawdziłem wiele razy.
proszę, co się dzieje i jak to obejść (
UPDATE. Jest to błąd, który został ustalony w nurcie ostatnio: https://sourceware.org/bugzilla/show_bug.cgi?id=17293
Update2. Pamiętaj moje własne odpowiedzi poniżej
Jaki jest kodowanie bazy danych? Wydaje się, że to ma znaczenie ... –
@TagirValeev Kodowanie: UTF8, Układanie: uk_UA.UTF-8 (oba, jak pokazano w pgadmin3). – brownian
PostgreSQL używa kolejności ustawień narodowych z systemu operacyjnego. Jeśli użyjesz narzędzia 'sort' z wiersza poleceń z tym samym sortowaniem i tymi samymi danymi, wypiszesz tę samą kolejność. –