PostgreSQL: кодировки

Материал из PhpWiki.

Перейти к: навигация, поиск

Как сделать, чтобы Postgre SQL поддерживал русский в кодировке [нужное вписать]?

По порядку:

1) Поддержка различных языков и кодировок включается при компиляции Postgre SQL ключами --enable-locale --enable-multibyte. RPM'ы, как правило, собираются с этими ключами, если вы собираете из исходников, не забудьте их указать!

Замечание: Начиная с версии 7.3 эта поддержка включена всегда, ключи при компиляции больше не используются.

2) У пользователя, от лица которого работает сервер (обычно postgres), должна быть установлена нужная локаль. Этого можно добиться, например, добавив в его файл .bash_profile строки:

LANG=ru_RU.KOI8-R
export LANG

Если нужной локали (например с кодировкой CP1251) в системе нет, то перед этим надо проделать следующее:

$ localedef -c -i ru_RU -f CP1251 ru_RU.CP1251

3) После этого надо проинициализировать директорию, в которой будут находиться базы данных, указав кодировку по умолчанию (можно, впрочем, и не указывать):

$ initdb -E KOI8

или, для любителей длинных ключей:

$ initdb --encoding=KOI8

Замечание: Начиная с версии 7.1 порядок сортировки строк и разница между заглавными/строчными буквами задаётся именно при этой инициализации в соответствии с установленной локалью, потом их изменить нельзя. До версии 7.1 эти значения определялись локалью при запуске postmaster'а, что могло привести к порче индексов по текстовым полям.

4) Кодировку также можно указывать при создании отдельных баз:

$ createdb -E win mustdie

5) Если все шаги проделаны верно, то сортировка, функции upper()/lower(), операторы ILIKE и * должны работать правильно. Если не работает хотя бы одна из этих функций, проверьте настройки.

Copyright http://phpclub.ru/faq/

Юрист онлайн юристлайн бесплатная консультация юриста онлайн.

Реклама