Я создал базу данных в PostgreSQL с "encoding = 'UTF8'" и загрузил в нее некоторые данные UTF8. Выбор работает нормально, но когда я пытаюсь сделать "WHERE UPPER (name) = 'FOO'" в запросе, я получаю ошибку
ERROR: invalid multibyte character for locale
Похоже, что мое исследование показывает, что это потому, что установка PostgreSQL была "initdb" с LANG=en_US
, а не LANG=en_US.UTF8
. Выполнение «SHOW LC_COLLATE
» показывает «en_US
». Я не хочу создавать дампы и воссоздавать все мои базы данных, потому что некоторые из них являются PostGIS, и воссоздать их очень сложно. Есть ли обходной путь, например, способ сделать эквивалент "UPPER", который работает для UTF8?
Обновление Я закончил делать дамп, reinitdb и восстановление базы данных, и это было менее болезненно, чем я думал, за исключением небольшой проблемы с выяснением, где данные были предполагается, потому что пользователь postgres не устанавливает переменную окружения PGDATA и не может найти ни один файл конфигурации или сценарий оболочки, которые я смог найти.