|
|
|
Сортировка русских текстов
|
|||
|---|---|---|---|
|
#18+
Подскажите, пожалуйста, кто в курсе, в чем причина и как бороться. Суть вопроса - неправильный учет пробелов при сортировке. Пример: create table test_fio (fio varchar(80)); insert into test_fio values ('Иванов Иван Иванович'); insert into test_fio values ('Иванова Ирина Ивановна'); select * from test_fio order by fio; fio ------------------------ Иванова Ирина Ивановна Иванов Иван Иванович Почему-то буква 'а' (русская) выводится раньше пробела, хотя ascii('а') = 193, ascii(' ') = 32 Параметры конфигурации: server_version = 8.4.221ts5 server_encoding = 'KOI8R' client_encoding = 'KOI8R' lc_collate = 'ru-RU.KOI8-R' lc_ctype = 'ru-RU.KOI8-R' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2016, 09:08 |
|
||
|
Сортировка русских текстов
|
|||
|---|---|---|---|
|
#18+
Pikarus, Postgres полагается на средства операционки для работы с кодировками. Из-за этого имеется куча граблей — каждая ОСь ведёт себя по своему и при смене можно получить другой порядок для идентично сделанной базы и идентичных запросов. Опять-таки, из-за багов в линуксовой glibc в 9.5.2 одну фичу тупо вырубили... Если вы хотите полагаться на ASCII значения, то создавайте базы в кодировке SQL_ASCII, которая есть аналог C кодировки. Или же (для версий 9.1 и старше) явно указывайте кодировку: Код: sql 1. Только это отключит использование индексов, если кодировка последних не совпадает с указанной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2016, 09:36 |
|
||
|
Сортировка русских текстов
|
|||
|---|---|---|---|
|
#18+
Pikarus, это ещё что, у этих рукожопов text::name сортируется в другом порядке , нежели исходный text. я об это как--то навернулся. тяжелое наследие студенческой лабораторки Сдаунбрейкера. тут адвокатов этого дерьма -- как грязи, т.ч. не будем заострять. "до чего довёл страну этот фигляр ПеЖе"(сс) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2016, 10:19 |
|
||
|
Сортировка русских текстов
|
|||
|---|---|---|---|
|
#18+
Pikarus, PS: а уж почему в осях эбанутая сортировка -- это вопрос к писателям осей -- вот уж знатнее рукожопов история не знала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2016, 10:22 |
|
||
|
Сортировка русских текстов
|
|||
|---|---|---|---|
|
#18+
vyegorov, понял, спасибо, стало быть в моем случае помочь ничем нельзя? в версии 8.4 в ORDER BY нельзя задать COLLATE, да и в любом случае, не хотелось бы проблем с индексами. Поднять версию до 9.5 тоже не могу - база корпоративная, не от меня зависит Других способов борьбы с этой фичей нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2016, 10:25 |
|
||
|
Сортировка русских текстов
|
|||
|---|---|---|---|
|
#18+
Pikarus, Выкручиваться. Postgres расширяем. Никто не мешает сделать функцию на PL/pgSQL или другом процедурном языке, или даже на C, в которой возвращать какое-то значение, которое будет сортировать данные так, как вам нужно. Можно и свой тип определить с полным набором функций. Но всё это нетривиально и требует времени. Учитывая, что вы на 8.4, которая уже не поддерживается (и 9.0 тоже, да и 9.1 в этом году уйдёт), то правильней будет настаивать на апгрейде базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2016, 10:48 |
|
||
|
|

start [/forum/topic.php?fid=53&gotonew=1&tid=1997309]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
82ms |
get topic data: |
6ms |
get first new msg: |
3ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 394ms |

| 0 / 0 |
