Добрый день! Уже несколько дней не могу решить проблему переноса базы данных postgresql с виндовой машины на линуксовую, проблема с кодировками.
Версия PostgreSQL: 9.4
База данных на Windows имеет следующие параметры:
Кодировка: UTF-8
Сопоставление: Russian_Russian.1251
Тип символа: Russian_Russian.1251
При попытке создать базу данных на линуксе с такими же параметрами выдается:
postgres=# CREATE DATABASE database WITH OWNER = postgres ENCODING = 'UTF-8' LC_COLLATE = 'ru_RU.cp1251' LC_CTYPE = 'ru_RU.cp1251' CONNECTION LIMIT = -1;
ОШИБКА: кодировка "UTF8" не соответствует локали "ru_RU.cp1251"
ПОДРОБНОСТИ: Для выбранного параметра LC_CTYPE требуется кодировка "WIN1251".
Т.е. либо всё должно быть в UTF-8, либо в WIN1251
Вопрос, почему для Windows нормально, когда база данных в одной кодировке, а сопоставление и тип в другой, а для линукса это страшный грех?
И как быть в такой ситуации? Как перенести базу данных из Windows в линукс?
Помогите, пожалуйста..
А вы попробуйте создать базу
А вы попробуйте создать базу в UTF-8 и перенести дамп. И посмотрите что получится.
Что касается LC_COLLATE, то в общем-то логично. Я, например, не понимаю как могут быть данные в многобайтовой UTF-8, а сортировка осуществляться по правилом однобайтовой кодировки windows-1251.
Вы уверены, что всё правильно понимаете про базу в Windows?
Зайдите в windows в psql и наберите там команду "\l". Должно получиться что-то типа того, что ниже:
Проверьте точно ли у вас UTF-8 соседствует с cp1251.
Вывод psql
Спасибо за ответ!
Пробовал создавать базу в UTF-8 и перенести дамп в нее, с виду все хорошо, база заливается без ошибок, но потом в ходе работы обнаруживаются косяки, не может найти и подхватить значения в некоторых местах...
Вывод на Windows машине:
postgres=# \l
Список баз данных
Имя | Владелец | Кодировка | LC_COLLATE | LC_CTYPE | Права доступа
-----------+----------+-----------+---------------------+---------------------+-----------------------
postgres | postgres | UTF8 | Russian_Russia.1251 | Russian_Russia.1251 |
project | postgres | UTF8 | Russian_Russia.1251 | Russian_Russia.1251 |
template0 | postgres | UTF8 | Russian_Russia.1251 | Russian_Russia.1251 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | Russian_Russia.1251 | Russian_Russia.1251 | =c/postgres +
| | | | | postgres=CTc/postgres
database | postgres | UTF8 | Russian_Russia.1251 | Russian_Russia.1251 |
Судя по выводу действительно UTF-8 соседствует с windows-1251.. вопрос остается открытым.
доброго дня. А вы попробуйте
доброго дня. А вы попробуйте перекодировать дамп из 1251 в utf. Хотя это у вас 1С и перекодировать наверно даже вредно.