powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / не сортирует рус.названия
14 сообщений из 14, страница 1 из 1
не сортирует рус.названия
    #34748515
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с такой ситуацией. Есть список клиентов. Запрос select client_name from clientdb order by client_name выводит колонку с именами в разброс. Можт чет упустил?!
...
Рейтинг: 0 / 0
не сортирует рус.названия
    #34748526
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT client_name from clientdb WHERE client_name~'^Р' ORDER BY client_name;
client_name
-------------------------------------
Рета ТД ООО
Рось ЛТД ЧП
Рута-сервис ЧП
Райт-сервис ООО
Ринон ЧП
...
Рейтинг: 0 / 0
не сортирует рус.названия
    #34749048
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо Вы упустили из виду кодировку текстовых данных в базе и локаль серверного процесса. они должны быть равны.

--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
не сортирует рус.названия
    #34749051
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сравните show server_encoding ; и show lc_collate ;

--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
не сортирует рус.названия
    #34767116
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёшсравните show server_encoding ; и show lc_collate ;

--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери


Приветствую. Ёш. server_encoding SQL_ASCII а lc_collate en_US.UTF-8. Не подскажите как поменять lc_collate. Пробовал поставить под пользователем postgres export LC_COLLATE=SQL_ASCII потом смотрю EXPORT грит что загружен. Но когда захожу в базу и смотрю show lc_collate выдает всеравно UTF-8(то что было). Можт это в самом postgres как-то можно поменять?! Спасибо.
...
Рейтинг: 0 / 0
не сортирует рус.названия
    #34768092
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prodiderserver_encoding SQL_ASCII а lc_collate en_US.UTF-8. Не подскажите как поменять lc_collate. Пробовал поставить под пользователем postgres export LC_COLLATE=SQL_ASCII потом смотрю EXPORT грит что загружен. Но когда захожу в базу и смотрю show lc_collate выдает всеравно UTF-8(то что было). Можт это в самом postgres как-то можно поменять?! Спасибо.помоему юникодные строки можно хранить в базе в кодировке SQL_ASCII - тоесть в данном случае проблемы имхо нету что server_encoding и lc_collate не совпадает. А проблема у Вас в другом, параметр lc_collate определяет _как_ сортировать и у Вас он равен en_US.UTF-8, то есть "в соответствии с правилами _английского_ языка". Вам нужно что бы было ru_RU.UTF-8 для этого поменяйте локаль серверного процесса на ru_RU.UTF-8. я незнаю нужно ли после изменения локали пересоздавать кластер через initdb и dump/restore или нет.
...
Рейтинг: 0 / 0
не сортирует рус.названия
    #34770740
prodider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёш prodiderserver_encoding SQL_ASCII а lc_collate en_US.UTF-8. Не подскажите как поменять lc_collate. Пробовал поставить под пользователем postgres export LC_COLLATE=SQL_ASCII потом смотрю EXPORT грит что загружен. Но когда захожу в базу и смотрю show lc_collate выдает всеравно UTF-8(то что было). Можт это в самом postgres как-то можно поменять?! Спасибо.помоему юникодные строки можно хранить в базе в кодировке SQL_ASCII - тоесть в данном случае проблемы имхо нету что server_encoding и lc_collate не совпадает. А проблема у Вас в другом, параметр lc_collate определяет _как_ сортировать и у Вас он равен en_US.UTF-8, то есть "в соответствии с правилами _английского_ языка". Вам нужно что бы было ru_RU.UTF-8 для этого поменяйте локаль серверного процесса на ru_RU.UTF-8. я незнаю нужно ли после изменения локали пересоздавать кластер через initdb и dump/restore или нет.

declare -x LANG="ru_RU.UTF-8" поменял. Эффекта 0. Попробую пересоздать кластер.
...
Рейтинг: 0 / 0
не сортирует рус.названия
    #34771168
Nick Gazaloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
prodider

declare -x LANG="ru_RU.UTF-8" поменял. Эффекта 0. Попробую пересоздать кластер.

The nature of some locale categories is that their value has to be fixed for the lifetime of a database cluster. That is, once initdb has run, you cannot change them anymore. LC_COLLATE and LC_CTYPE are those categories. They affect the sort order of indexes, so they must be kept fixed, or indexes on text columns will become corrupt. PostgreSQL enforces this by recording the values of LC_COLLATE and LC_CTYPE that are seen by initdb. The server automatically adopts those two values when it is started.
...
Рейтинг: 0 / 0
не сортирует рус.названия
    #34780765
Vzhik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот у меня есть Solaris 10 и под ним хоть зашибись, но сортировать он не хочет правильно, т.к. postgresql использует системную функцию, которая у него не пашет для русского utf8.

Кстати гдето вычитал (еще перед отпуском, посему потерял где...), что под UTF8 должно сортироваться как АаБбВвГг... А не как раньше АБВГабвг....
...
Рейтинг: 0 / 0
не сортирует рус.названия
    #34914287
Vzhik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про Solaris 10 и сортировку
поставил последнюю версию (8/07 или u4)....
сортировка работает - ура!!! Правда как аАбБвВ... (сначала маленькие буквы затем заглавные)
...
Рейтинг: 0 / 0
не сортирует рус.названия
    #34927162
Подскажите, а если:

postgres=# show server_encoding ;
server_encoding
-----------------
UTF8
(1 запись)

postgres=# show lc_collate ;
lc_collate
-------------
ru_RU.UTF-8
(1 запись)

И при этом:
postgres=# SELECT 'хабр' ILIKE 'Хабр'
postgres-# ;
?column?
----------
f
(1 запись)

Что делать? Подозреваю, это тоже проблема локали
...
Рейтинг: 0 / 0
не сортирует рус.названия
    #34928075
Vzhik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня лично PG 8.2.5
а у вас?
...
Рейтинг: 0 / 0
не сортирует рус.названия
    #34930428
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ТолкачёвПодскажите, а если:

postgres=# show server_encoding ;
server_encoding
-----------------
UTF8
(1 запись)

postgres=# show lc_collate ;
lc_collate
-------------
ru_RU.UTF-8
(1 запись)

И при этом:
postgres=# SELECT 'хабр' ILIKE 'Хабр'
postgres-# ;
?column?
----------
f
(1 запись)

Что делать? Подозреваю, это тоже проблема локалинет к сожалению всё хуже. Судя по server_encoding и lc_collate с кодировкой/сортировкой/upper/lower проблем не должно быть - всё правильно. У Вас скорее всего версия 8.1 или младше. В них не работает ilike и regexp для unicode. В версии 8.2 исправлен ilike. Насколько я понял из рассылки - для 8.1 и младше чинить не будут потому что оно и не работало никогда. Обойти это можно использовав upper или lower, например так:
Код: plaintext
SELECT upper('хабр') ILIKE upper('Хабр')
или обновиться до 8.2

ps: в 8.2 regexp так же не работают, незнаю как в 8.3 с regexp и unicode
...
Рейтинг: 0 / 0
не сортирует рус.названия
    #34930430
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл упомянуть ещё один вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
seb=> select version();
                                         version
-----------------------------------------------------------------------------------------
 PostgreSQL  8 . 1 . 10  on i486-pc-linux-gnu, compiled by GCC cc (GCC)  4 . 2 . 1  (Debian  4 . 2 . 1 - 5 )
( 1  запись)

seb=> SELECT 'хабр' ILIKE 'Хабр';
 ?column?
----------
 t
( 1  запись)

seb=> SHOW server_encoding ;
 server_encoding
-----------------
 KOI8
Вам действительно так нужен unicode в СУБД ? для однобайтовых кодировок всё прекрасно работает во всех версиях :)

--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / не сортирует рус.названия
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]