Не знаю, на каком сайте этот вопрос точно соответствует, поэтому разместите его здесь.Таблица символов сортировки символов Unicode по умолчанию
Я использую Postgresql 9.2 на RHEL 6.4 и соблюдать следующие правила:
select foo
from unnest('{а,ә,б,в,г,д,е,ж}'::text[]) as foo
order by foo collate "kk_KZ.utf8"
дает
а
ә
б
в
г
д
е
ж
НО
select foo
from unnest('{а,ә,б,в,г,д,е,ж}'::text[]) as foo
order by foo collate "en_US.utf8"
дает
а
б
в
г
д
е
ә -- misplaced
ж
Кроме того, я обнаружил, что имеется таблица элементов сортировки Unicode по умолчанию [1], в которой указан соответствующий символ (04D9; [.199D.0020.0002.04D9] # CYRILLIC SMALL LETTER SCHWA) в правильном порядке.
Я понимаю, что глупо ожидать, что кириллические символы будут обрабатываться должным образом с помощью локали «en_US.utf8», но что такое правильное поведение Unicode или любых других соответствующих стандартов в случаях, когда символ обычно не принадлежит язык/язык, используемый для сортировки?
[1] http://www.unicode.org/Public/UCA/latest/allkeys.txt
FYI: glibc 2.28, который будет выпущен 2018-08-01, был синхронизирован с ISO-14651: 2016 (сам синхронизирован с Unicode 9) и будет использовать ожидаемый заказ для en_US. – ninjalj