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/