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

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

--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
31.08.2007, 11:25
    #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
31.08.2007, 14:47
    #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
03.09.2007, 09:34
    #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
03.09.2007, 11:53
    #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
06.09.2007, 12:43
    #34780765
Vzhik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не сортирует рус.названия
а вот у меня есть Solaris 10 и под ним хоть зашибись, но сортировать он не хочет правильно, т.к. postgresql использует системную функцию, которая у него не пашет для русского utf8.

Кстати гдето вычитал (еще перед отпуском, посему потерял где...), что под UTF8 должно сортироваться как АаБбВвГг... А не как раньше АБВГабвг....
...
Рейтинг: 0 / 0
02.11.2007, 18:23
    #34914287
Vzhik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не сортирует рус.названия
Про Solaris 10 и сортировку
поставил последнюю версию (8/07 или u4)....
сортировка работает - ура!!! Правда как аАбБвВ... (сначала маленькие буквы затем заглавные)
...
Рейтинг: 0 / 0
09.11.2007, 10:32
    #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
09.11.2007, 13:35
    #34928075
Vzhik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не сортирует рус.названия
у меня лично PG 8.2.5
а у вас?
...
Рейтинг: 0 / 0
11.11.2007, 05:47
    #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
11.11.2007, 05:55
    #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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / не сортирует рус.названия / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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