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

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

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

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

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

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


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

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

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

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

у меня работает:
Код: 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
Upper() и Lower() для нескольких языков
    #35262563
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
двойное двоеточие в "РУС.::" и отсутствие его в запросе - это не глюк, это я накосячил когда копировал %)


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


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
Upper() и Lower() для нескольких языков
    #35262868
xUSSR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стоп!!! Как был инициализирован кластер?
...
Рейтинг: 0 / 0
Upper() и Lower() для нескольких языков
    #35262965
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Upper() и Lower() для нескольких языков
    #35263180
Vzhik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно в системе просто не установлены локали, наверняка тока русский был поставлен...
...
Рейтинг: 0 / 0
Upper() и Lower() для нескольких языков
    #35263292
Гость_0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VzhikНаверно в системе просто не установлены локали, наверняка тока русский был поставлен...у меня тоже только русская и английская, ни турецкой ни украинской нет :) но кодировка utf-8 правильно обрабатывается (как и должно быть :) )
...
Рейтинг: 0 / 0
Upper() и Lower() для нескольких языков
    #35263295
Фотография Niemi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость_0 VzhikНаверно в системе просто не установлены локали, наверняка тока русский был поставлен...у меня тоже только русская и английская, ни турецкой ни украинской нет :) но кодировка utf-8 правильно обрабатывается (как и должно быть :) )
может тогда подскажете автору какая у вас ОС, версия базы и локали?
...
Рейтинг: 0 / 0
Upper() и Lower() для нескольких языков
    #35263765
xUSSR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак.... CentOS 5.1, стандартный пакет для постгреса (8.1.9) локаль ru.RU.utf8. Количество локалей в ОС не поддается подсчету - их много.... а фокус в программе, которой вставляли записи в базу с удаленной машины....

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

Попробовали написать php скрипт в utf-8, воткнули украинский и русский язык в одну таблицу - lower при запросе для этой таблицы РОБОТАЕТ. Мы накосячили и я занервничал :-). А занервничал я потому, что вообще возник такой странный вопрос, ибо в том же интербейсе/фаерберде эта проблема решалась тупым указанием коллейшена непосредственно в запросе. Собсно вот. Вроде пришли к логическому завершению. Непонятно одно, зачем тады в постгресе поддерживается список локалей для кластера, если в utf8 усе работает. Может русский и украинский частный случай? И на самом деле при вставке в базу русского текста и, например, иврита ничего подобного работать не будет? Вобщем осадок остался.... ;-)
utf8 - это больший объём данных, чем нативная локаль. + еще не так давно с УТФ-8 были проблемы. Думаю, что будущее - именно за этой локалью.
...
Рейтинг: 0 / 0
Upper() и Lower() для нескольких языков
    #35264048
Vzhik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ответил так, потому что
имеет меня Solaris 10... тока когда поставил версию (8/07 или u4)....
сортировка заработала правда как аАбБвВ... (сначала маленькие буквы затем заглавные)
и явно это зависело от установленной локали
проверить что установлено
sh> locale -a
...
Рейтинг: 0 / 0
Upper() и Lower() для нескольких языков
    #35265317
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Upper() и Lower() для нескольких языков
    #35265884
xUSSR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стоп!

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

" 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
Upper() и Lower() для нескольких языков
    #35266246
Гость_0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
локализация и кодировка - это разные вещи. локализация включает в себя указание кодровки, но не ограничивается этим. ещё локализация включает в себя формат даты, времени, разделителей цифр в числах, тексты собщений и многое другое.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Upper() и Lower() для нескольких языков
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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