Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Upper() и Lower() для нескольких языков / 24 сообщений из 24, страница 1 из 1
07.04.2008, 01:04
    #35238457
xUSSR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
Такая тема.... Есть сервер/база.... Точнее должна быть. Будет поиск с применением Upper() и Lower(). Но фокус в том, что в базе данные на нескольких неанглийских ;-) языках. Какие параметры задать серверу и базе, чтобы Upper() и Lower() корректно работали для ЛЮБОГО языка! Вот... собсно я пока не могу понять.... Сервер под редхатом будет....
...
Рейтинг: 0 / 0
07.04.2008, 02:19
    #35238477
iz
iz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
нужно инициализировать кластер в кодировке UTF-8
...
Рейтинг: 0 / 0
07.04.2008, 11:30
    #35239040
xUSSR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
Понял, попробую.... а то что-то путаница прям какая-то после фаерберда :-)
...
Рейтинг: 0 / 0
08.04.2008, 09:06
    #35241462
galisha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
To xUSSR

Уточнение: есть таблица, в которой в перемешку лежат записи с разных языков ?

Очень интересно было бы узнать результат Lower/Upper и Order by.

Не отпишите ?
...
Рейтинг: 0 / 0
08.04.2008, 20:28
    #35243810
xUSSR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
Как настрою сервер.....

Да в одной таблице несколько языков.... попробую даже раньше под виндой.... поставлю ради теста сервер ;-)
...
Рейтинг: 0 / 0
17.04.2008, 12:04
    #35261365
xUSSR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
установил CentOS 5 и постгрес 8.1.9

initdb -D --encoding=UTF8 --locale=ru_RU.utf8


Создал базу в utf8 - lower работает. создал в 1251 - хер. Обсуждать другие языки даже смешно....

в параметре --locale согласно доке можно задать несколько локалей - как это работает - хз, время тратить неохота, но то что СУБД .... очевидно ;-)
...
Рейтинг: 0 / 0
17.04.2008, 12:15
    #35261403
ChameLe0n
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
авторсоздал в 1251
зачем Вам это?
...
Рейтинг: 0 / 0
17.04.2008, 14:52
    #35262053
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
xUSSRinitdb -D --encoding=UTF8 --locale=ru_RU.utf8
Создал базу в utf8 - lower работает. создал в 1251 - хер.создавать несколько баз в разных кодировках, не совпадающих с локалью процесса сервера - не нужно. это не будет работать.

Вам нужно использовать только _одну_ кодировку - UTF8, она включает в себя все остальные.
...
Рейтинг: 0 / 0
17.04.2008, 15:34
    #35262255
xUSSR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
Ёшсоздавать несколько баз в разных кодировках, не совпадающих с локалью процесса сервера - не нужно. это не будет работать.
Вам нужно использовать только _одну_ кодировку - UTF8, она включает в себя все остальные.

Да? И как мне сделать, чтобы лежащие в одной таблице рашн буквы и, например, украинские "подчинялись" команде lower. Сервер ТРЕБУЕТ locale - или сам ставит свою. Не указал локаль "рашн" - ничего не приводится к нижнему регистру. Интуитивно кажется, что задав несколько локалей на кластер можно решить проблему, но что-то есть сомнения. Других путей нет - в данном случае кодировка базы ничего вообще не дает... Т.е. хранить то украинские буквы можно, но lower будет работать только для инглиша и раши. :-(
...
Рейтинг: 0 / 0
17.04.2008, 16:44
    #35262551
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
покажите что у Вас не получается. покажите пример текста на украинском который не приводится к нужному регистру.

у меня работает:
Код: plaintext
1.
2.
3.
4.
seb=> select upper('анг.: abc рус.: ёйфы тур.: Bağışlar Köy çeşmesi укр.: Аа Бб Вв Гг Ґґ Дд Ее Єє Жж Зз Ии Іі Її Йй Кк Лл Мм Нн Оо Пп Рр Сс Тт Уу Фф Хх Цц Чч Шш Щщ Ьь Юю Яя');
                                                                           upper
-----------------------------------------------------------------------------------------------------------------------------------------------------------
 АНГ.: ABC РУС.:: ЁЙФЫ ТУР.: BAĞIŞLAR KÖY ÇEŞMESI УКР.: АА ББ ВВ ГГ ҐҐ ДД ЕЕ ЄЄ ЖЖ ЗЗ ИИ ІІ ЇЇ ЙЙ КК ЛЛ ММ НН ОО ПП РР СС ТТ УУ ФФ ХХ ЦЦ ЧЧ ШШ ЩЩ ЬЬ ЮЮ ЯЯ
( 1  запись)

авторустановил CentOS 5 и постгрес 8.1.9постгрес использует системные библиотеки для поддержки локалей - возможно проблема в CentOS (скорее всего) ? ещё попробуйте новый постгрес 8.3 (хотя у меня работает вышеприведённая строка и в 8.1 и в 8.2)


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
17.04.2008, 16:47
    #35262563
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
двойное двоеточие в "РУС.::" и отсутствие его в запросе - это не глюк, это я накосячил когда копировал %)


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
17.04.2008, 16:54
    #35262598
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
если у Вас нет соответствующих шрифтов - то вот картинка (на всякий случай)


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
17.04.2008, 18:14
    #35262868
xUSSR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
Стоп!!! Как был инициализирован кластер?
...
Рейтинг: 0 / 0
17.04.2008, 19:08
    #35262965
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
xUSSRСтоп!!! Как был инициализирован кластер?как Вам сказал уже iz во втором сообщении темы: utf-8

локаль: ru_RU.UTF-8
кодировка: UTF-8

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
seb=> \l
        Список баз данных
    Имя    | Владелец | Кодировка
-----------+----------+-----------
. . .
 postgres  | postgres | UTF8
 seb       | seb      | UTF8
 template0 | postgres | UTF8

seb=> show server_encoding ;
 server_encoding
-----------------
 UTF8

 lc_collate                      | ru_RU.UTF-8        | Shows the collation order locale.
 lc_ctype                        | ru_RU.UTF-8        | Shows the character classification and case conversion locale.
 lc_messages                     | ru_RU.UTF-8        | Sets the language in which messages are displayed.
 lc_monetary                     | ru_RU.UTF-8        | Sets the locale for formatting monetary amounts.
 lc_numeric                      | ru_RU.UTF-8        | Sets the locale for formatting numbers.
 lc_time                         | ru_RU.UTF-8        | Sets the locale for formatting date and time values.


кластер инициализировался автоматически, при установке пакета. точную команду которая при этом выполнялась - не скажу, но видимо как Вы сами писали выше: initdb -D /path/to/data --encoding=UTF-8 --locale=ru_RU.UTF-8
...
Рейтинг: 0 / 0
17.04.2008, 22:36
    #35263180
Vzhik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
Наверно в системе просто не установлены локали, наверняка тока русский был поставлен...
...
Рейтинг: 0 / 0
18.04.2008, 02:02
    #35263292
Гость_0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
VzhikНаверно в системе просто не установлены локали, наверняка тока русский был поставлен...у меня тоже только русская и английская, ни турецкой ни украинской нет :) но кодировка utf-8 правильно обрабатывается (как и должно быть :) )
...
Рейтинг: 0 / 0
18.04.2008, 02:06
    #35263295
Niemi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
Гость_0 VzhikНаверно в системе просто не установлены локали, наверняка тока русский был поставлен...у меня тоже только русская и английская, ни турецкой ни украинской нет :) но кодировка utf-8 правильно обрабатывается (как и должно быть :) )
может тогда подскажете автору какая у вас ОС, версия базы и локали?
...
Рейтинг: 0 / 0
18.04.2008, 10:40
    #35263765
xUSSR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
Итак.... CentOS 5.1, стандартный пакет для постгреса (8.1.9) локаль ru.RU.utf8. Количество локалей в ОС не поддается подсчету - их много.... а фокус в программе, которой вставляли записи в базу с удаленной машины....

Попробовали написать php скрипт в utf-8, воткнули украинский и русский язык в одну таблицу - lower при запросе для этой таблицы РОБОТАЕТ. Мы накосячили и я занервничал :-). А занервничал я потому, что вообще возник такой странный вопрос, ибо в том же интербейсе/фаерберде эта проблема решалась тупым указанием коллейшена непосредственно в запросе. Собсно вот. Вроде пришли к логическому завершению. Непонятно одно, зачем тады в постгресе поддерживается список локалей для кластера, если в utf8 усе работает. Может русский и украинский частный случай? И на самом деле при вставке в базу русского текста и, например, иврита ничего подобного работать не будет? Вобщем осадок остался.... ;-)
...
Рейтинг: 0 / 0
18.04.2008, 10:41
    #35263769
xUSSR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
Писал с мобилы, так что за ошипки не надо пинать :-)
...
Рейтинг: 0 / 0
18.04.2008, 11:47
    #35263987
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
xUSSRИтак.... CentOS 5.1, стандартный пакет для постгреса (8.1.9) локаль ru.RU.utf8. Количество локалей в ОС не поддается подсчету - их много.... а фокус в программе, которой вставляли записи в базу с удаленной машины....

Попробовали написать php скрипт в utf-8, воткнули украинский и русский язык в одну таблицу - lower при запросе для этой таблицы РОБОТАЕТ. Мы накосячили и я занервничал :-). А занервничал я потому, что вообще возник такой странный вопрос, ибо в том же интербейсе/фаерберде эта проблема решалась тупым указанием коллейшена непосредственно в запросе. Собсно вот. Вроде пришли к логическому завершению. Непонятно одно, зачем тады в постгресе поддерживается список локалей для кластера, если в utf8 усе работает. Может русский и украинский частный случай? И на самом деле при вставке в базу русского текста и, например, иврита ничего подобного работать не будет? Вобщем осадок остался.... ;-)
utf8 - это больший объём данных, чем нативная локаль. + еще не так давно с УТФ-8 были проблемы. Думаю, что будущее - именно за этой локалью.
...
Рейтинг: 0 / 0
18.04.2008, 11:57
    #35264048
Vzhik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
Я ответил так, потому что
имеет меня Solaris 10... тока когда поставил версию (8/07 или u4)....
сортировка заработала правда как аАбБвВ... (сначала маленькие буквы затем заглавные)
и явно это зависело от установленной локали
проверить что установлено
sh> locale -a
...
Рейтинг: 0 / 0
18.04.2008, 16:25
    #35265317
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
xUSSRА занервничал я потому, что вообще возник такой странный вопрос, ибо в том же интербейсе/фаерберде эта проблема решалась тупым указанием коллейшена непосредственно в запросе.по моему это очень странно - указывать правила collate в запросе :) а если у меня индекс create index aaa_idx(upper(t)) а в запросе я указываю другую локаль - то сортировка данных не совпадёт с сортировкой индексов %) если в интербейз нельзя делать индекс по функции - то тогда всё понятно - пусть извращаются как хотят там у себя :)
xUSSRНепонятно одно, зачем тады в постгресе поддерживается список локалей для кластера, если в utf8 усе работает.я приблизительно понимаю что Вы хотели сказать, но всё равно уточню - в постгресе НЕТ никакого списка локалей в кластере. локаль железно прописывается в кластер при создании, она одна и изменить её нельзя. если же речь о том - зачем другие кодировки если есть unicode, то....
во первых - как не странно, не все символы есть в unicode %) вспомните что есть тексты на таких языках как: старо/церковно славянский, иероглифы китайские/японские (проблема в том что - они есть, но не все варианты). кстати, Вы не поверите, но есть даже языки где цифры - не арабские или римские ! :)

во вторых, Вы не забывайте что постгрес: "It runs on all major operating systems, including Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64), and Windows" я честно говоря не уверен что все эти системы и их варианты, на которых работает postgres, поддерживают unicode в полном объёме (а постгрес использует системные функции для поддержки локали).

в третьих - как уже говорилось выше - скорость и размер.

ну и в четвёртых - с utf8 работает, но не всё :) есть известная проблема - регулярные выражения в постгрес некорректно работают с этой кодировкой.
...
Рейтинг: 0 / 0
18.04.2008, 22:35
    #35265884
xUSSR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
Стоп!

вот здесь написано следущее:

" Locale support is automatically initialized when a database cluster is created using initdb. initdb will initialize the database cluster with the locale setting of its execution environment by default, so if your system is already set to use the locale that you want in your database cluster then there is nothing else you need to do. If you want to use a different locale (or you are not sure which locale your system is set to), you can instruct initdb exactly which locale to use by specifying the --locale option. For example:

initdb --locale=sv_SE

This example sets the locale to Swedish (sv) as spoken in Sweden (SE). Other possibilities might be en_US (U.S. English) and fr_CA (French Canadian). If more than one character set can be useful for a locale then the specifications look like this: cs_CZ.ISO8859-2."


Какой смысл тогда несет СПИСОК локалей? И, следуя логике, можно вообще не указывать этот параметр при создании кластера, если уже указано UTF8. Ибо тогда, раз работают два языка на русском UTF (локаль), lower будет работать на любой локали для любого языка. Я правильно понял?

Будем рассматривать идеальный случай, когда ОС поддерживает UTF для всех требуемых языков.
...
Рейтинг: 0 / 0
19.04.2008, 15:05
    #35266246
Гость_0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Upper() и Lower() для нескольких языков
локализация и кодировка - это разные вещи. локализация включает в себя указание кодровки, но не ограничивается этим. ещё локализация включает в себя формат даты, времени, разделителей цифр в числах, тексты собщений и многое другое.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Upper() и Lower() для нескольких языков / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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