Page 1 of 1

Смена кодировки PostgreSQL на UTF8

Posted: Fri Dec 16, 2016 3:58 pm
by popcornphp
Добрый день. Делаю миграцию, а тут такая ошибка:
in encoding "UTF8" has no equivalent in encoding "LATIN1"
Image

Прежде решал её таким образом:

Code: Select all

$ sudo pg_dropcluster --stop 9.5 main
$ sudo pg_createcluster --locale en_US.UTF-8 --start 9.5 main
Но сейчас, этим способом, я снес всю базу данных и VestaCP выдает ошибку "Error: Connection to localhost failed". Можно перевести базу в UTF8, не затронув работоспособность?

Спасибо

Re: Смена кодировки PostgreSQL на UTF8

Posted: Mon Mar 20, 2017 3:53 pm
by skurudo
Стоит попробовать вот эти решения:
http://stackoverflow.com/questions/3692 ... n-postgres

Re: Смена кодировки PostgreSQL на UTF8

Posted: Sat Mar 17, 2018 11:33 am
by LAlf
Собственно возникла такая же проблема (как на скрине из стартпоста) на последней версии vestacp (ubuntu 16.04).
Заметил, что после установки весты не сменились локали, везде тупо "en_US", а не "en_US.UTF-8".
При создании БД из панели выбирается кодировка utf-8, но это никак не помогает, т.к. в phppgadmin в столбце "кодировка" у БД всё равно LATIN1.
Подозреваю, что это из-за того, что по дефолу веста не ставит дефолтную кодировку в системе при установке или она сбрасывается каким-то магическим образом + сам образ убунты у хостера какой-то "некорректный" для весты, т.к. у другого хостера вроде бы таких проблем не было (проверил - у другого хостера всё ок). Смена кодировок при подключении через PHP PDO не помогает вообще.

Вообщем, хотелось бы чтоб команда весты проверила это недоразумение и пофиксила в следующих релизах такое поведение, чтоб не были базы в LATIN1, т.к. это ну уж совсем проблемно исправлять (через удаление и восстановление кластера и прочие похожие махинации).

Re: Смена кодировки PostgreSQL на UTF8

Posted: Sat Mar 17, 2018 12:20 pm
by LAlf
Вроде как помогла смена кодировки на пустой базе (до заполнения, сразу после создания) с помощью следующих команд в ssh:

Code: Select all

su postgres
psql --command="update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = '[DATABASE_NAME]';"
PS: да, всё ок при таком подходе на пустой базе. Но отмечу ещё отдельно, что если база уже заполнена - только через дамп, чтоб избежать порчи данных. Способ тут нашел если что: https://stackoverflow.com/questions/509 ... s-database