Как изменить кодировку базы данных для базы данных PostgreSQL с помощью sql или phpPgAdmin?
Как изменить кодировку базы данных для базы данных PostgreSQL с помощью sql или phpPgAdmin?
3 ответов
короче говоря, вы не можете сделать это только с phpPgAdmin или SQL без риска существующее повреждение данных. Вы должны экспортировать все данные, создать базу данных с правильной кодировкой и восстановить экспортированные данные.
вот как вы должны действовать:
-
создать дамп базы данных:
pg_dump your_database > your_database.sql
это сохранит вашу базу данных в формате sql, в кодировке вы в настоящее время иметь.
-
удалить базу данных (или переименовать его):
DROP DATABASE your_database
если у вас достаточно места для хранения, я рекомендую оставить старую базу данных, пока вы не убедитесь, что все в порядке с новой,переименовать это:
ALTER DATABASE your_database RENAME TO your_database_backup;
-
создать базу данных с новой кодировкой:
CREATE DATABASE your_database WITH ENCODING 'UNICODE' TEMPLATE=template0;
-
импорт данных из дампа, созданный до:
PGCLIENTENCODING=YOUR_OLD_ENCODING psql -f your_database.sql your_database
вам нужно установить кодировку клиента psql на тот, который у вас был в старой базе данных.
изменение кодировки "на лету" невозможно, поскольку для этого потребуется переписать большую часть внутренних данных базы данных, что почти равно воссозданию БД, как я описал.
можно просто изменить внутреннюю информацию postgres о базе данных и любые новые данные после этого изменения будут сохранены правильно, однако ваш существующие данные может быть поврежден.
вы можете изменить кодировку на лету без дампа / восстановления:
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'database_name'
чтобы развернуть ответы, вы можете использовать эти команды для выполнения своей задачи.
// Backup the database to outfile
pg_dump dbname > outfile
// Terminate all connections to the database
psql -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='dbname';"
// Delete the database
psql -c "DROP DATABASE dbname;"
//Re-create the database using the encoding keyword
psql -c "CREATE DATABASE dbname ENCODING='UTF8';"
//Import the saved data
psql -f outfile
база данных сброса:http://www.postgresql.org/docs/9.4/static/backup-dump.html
создание базы данных:http://www.postgresql.org/docs/9.4/static/sql-createdatabase.html
Это список всех кодировок, доступных для версии 9.4: http://www.postgresql.org/docs/9.4/static/multibyte.html#MULTIBYTE-CHARSET-SUPPORTED