Как конвертировать БД в postgreSQL в utf8? - PullRequest
12 голосов
/ 10 января 2012

Я только что получил базу данных в postgreSQL для своего проекта и только что понял, что она в кодировке SQL_ASCII, что, по-моему, означает «без кодировки».

Так, каков самый простой способ преобразовать это в utf8? И я знаю, что БД должен быть в латинице 1, не повредит ли конвертация контента?

Спасибо!

Ответы [ 4 ]

14 голосов
/ 11 января 2012

Преобразование в UTF8 не должно повредить ваши данные, так как (я считаю) все символы в SQL_ASCII также существуют в utf8;у них просто разные байтовые коды.

Лучше всего перестроить базу данных.Это дамп, создайте базу данных utf8, затем восстановите дамп в эту новую базу данных.

postgres pg_dump --encoding utf8 main -f main.sql
createdb -E utf8 newMain
psql -f main.sql -d newMain

После этого вы, конечно, можете переименовать базы данных, если вы уверены, что новый UTF8 соответствует вашим данным.*

3 голосов
/ 08 июля 2015

Преобразование UTF-8 - все о том, какие символы были сохранены в не-UTF-8 дБ: в зависимости от данных, предлагаемое решение может потерпеть неудачу. Мне удалось преобразовать мой, следуя этому учебнику , используя перекодировать (небольшой инструмент из проекта GNU, который позволяет вам на лету изменять кодировку данного файла), и я пришел с этим:

pg_dump -v --encoding utf8 -Fc -Z9 -c -f origindb.sql.bin iso8859-1-db

pg_restore origindb.sql.bin | recode iso-8859-1..u8 | psql --dbname utf8converteddb
3 голосов
/ 20 января 2014

Я решил использовать эти команды;

1-) Экспорт

pg_dump --username=postgres --encoding=ISO88591 database -f database.sql

и после

2-) Импорт

psql -U postgres -d database < database.sql

эти команды помогли мне решить проблему преобразования SQL_ASCII - UTF-8

0 голосов
/ 03 декабря 2015

Я искал весь интернет в поисках решения этой проблемы, и вышеуказанное решение Koyots сработало впервые, потратив бесчисленные часы, пытаясь все перенести старую базу данных SQL_ASCII в новую базу данных UTF8

Чтобы расширить решение ...

  • Сначала я перенаправил все сайты на страницу обслуживания.
  • Переименовал базу данных, добавив к ее имени "_ascii", просто чтобы быть уверенным, что к ней ничего не может подключиться, а также, после этого я знаю, что это была оригинальная база данных !!
  • Создана новая база данных utf8 с добавлением к имени «_utf8» (добавьте TEMPLATE = template0 в ЗАЯВЛЕНИЕ CREATE DATABASE)
  • Резервное копирование базы данных ascii
  • Восстановил резервную копию в новой базе данных utf8
  • Переименовал базу данных utf8 обратно в то, что я назвал ранее
  • Проверьте, что общий размер базы данных примерно равен размеру исходной базы данных. Не будет точно соответствовать из-за мертвых кортежей и т. Д. Новая база данных должна быть меньше в зависимости от коэффициента заполнения и т. Д.
  • Отключить перенаправления веб-сайтов
  • Проверка всех сайтов

Я бы посоветовал хранить обе базы данных в течение нескольких недель, пока вы не убедитесь, что не потеряли данные (при условии, что вы можете сэкономить место на диске)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...