Проблема:
В PostgreSQL функции upper() и lower() не работают для русских букв (буквы остаются в том же регистре, в каком и были). Кодировка БД - 'UTF-8'.
Решение:
Чтобы корректно работали функции upper() / lower() для русских букв (а также, например, регистронезависимые регулярные выражения), нужно корректно задать collation и character classification при создании базы (а не только кодировку) параметрами LC_COLLATE и LC_CTYPE команды CREATE DATABASE, установив их в 'ru_RU.UTF-8'. Вот только введены эти параметры были только в 8.4, а в моем случае версия сервера - 8.3, где эти параметры конфигурируются единожды, при инициализации PostgreSQL-кластера (командой initdb). Сомневаюсь, что получится это обойти, поэтому остается только дампануть все базы, переинициализировать кластер, и восстановиться из дампа. Ну или обновить версию сервера ;)
PS Посмотреть текущие настройки collation`а можно запросом:
PS Посмотреть текущие настройки collation`а можно запросом:
select * from pg_settings where name like 'lc_%'Однако запросом:
SET lc_collate to 'ru_RU.UTF-8';ничего поправить не удастся:
ERROR: parameter "lc_collate" cannot be changed
Комментариев нет:
Отправить комментарий