Подскажите как перекодировать базу из Win1251 в utf8?

Вопросы программирования БД, их оптимизации, резервирования и восстановления данных.

Модераторы: Trinity admin`s, Free-lance moderator`s

Ответить
Ziggy Stardust
Advanced member
Сообщения: 327
Зарегистрирован: 15 сен 2007, 13:23
Откуда: Екатеринбург
Контактная информация:

Подскажите как перекодировать базу из Win1251 в utf8?

Сообщение Ziggy Stardust » 22 июл 2008, 13:42

Ситуация следующая. Есть сервер СУБД PgSQL 8.3 (ОС FreeBSD 6.x).

В нем есть база с родной кодировкой Win2151. Есть необходимость перекодироватье ее в юникод.

Вроде бы согласно манам алгоритм должен быть следующим:

1. pg_dump ... -E utf8 db_name > db_dump
2. drop database db_name
3. create database db_name ... encoding = 'utf8'
4. psql ... -f db_dump db_name

Но облом возникает уже на первом же этапе:

# pg_dump -U pgsql -h ~pgsql/sockets -E utf8 otrs > otrs_2008-07-22-01.sql

pg_dump: SQL-команда не удалась

pg_dump: Сообщение об ошибке с сервера: ERROR:  character 0x98 of encoding "WIN1251" has no equivalent in "UTF8"

pg_dump: Команда была: COPY public.article (id, ticket_id, article_type_id, article_sender_type_id, a_from, a_reply_to, a_to, a_cc, a_subject, a_message_id, a_content_type, a_body, incoming_time, content_path, a_freekey1, a_freetext1, a_freekey2, a_freetext2, a_freekey3, a_freetext3, valid_id, create_time, create_by, change_time, change_by) TO stdout;

Что можно придумать?

ugin
member
Сообщения: 28
Зарегистрирован: 11 июл 2008, 15:23
Откуда: Yekaterinburg
Контактная информация:

Сообщение ugin » 22 июл 2008, 15:16

Есть вероятность, что это особенность скомпилированной PG версии на FreeBSD. Вообще последние версии PG хорошо работают только на линуксе, а с BSD семейством проблемы (сам сталкивался прошлым летом).
Можно попробовать попытаться сделать тоже самое на линуксе (если это не ошибка в процедуре базы).

Ziggy Stardust
Advanced member
Сообщения: 327
Зарегистрирован: 15 сен 2007, 13:23
Откуда: Екатеринбург
Контактная информация:

Сообщение Ziggy Stardust » 23 июл 2008, 08:18

Да нет, похоже это в самом деле что-то в тексте не то.

Iconv на том же самом месте обламывается при попытке им переконвертить SQL скприпт из 1251 в юникод.

iconv -c -f cp1251 -t utf-8 ... отработал. Попробую что получилось в копию базы залить и подцепить к копии приложения...

Линукса к сожалению нету в доступе, чтобы экперимент провести.

Andrey N. Oktyabrski
Advanced member
Сообщения: 229
Зарегистрирован: 25 окт 2005, 09:30
Откуда: Краснодар

Сообщение Andrey N. Oktyabrski » 24 июл 2008, 13:57

Разницы нет - пингвины, черти... Всё едино - iconv везде одинаковый.
Фокус с перекодированием дампа обычно прокатывает без проблем.

Ziggy Stardust
Advanced member
Сообщения: 327
Зарегистрирован: 15 сен 2007, 13:23
Откуда: Екатеринбург
Контактная информация:

Сообщение Ziggy Stardust » 25 июл 2008, 07:41

Ага, в самом деле все прокатило нормально.

В чем дело было, почему сам PG не мог перекодироватьь и почему iconv без "-с" опции не мог, так и не понял я. Ну да и хрен с ним...

Andrey N. Oktyabrski
Advanced member
Сообщения: 229
Зарегистрирован: 25 окт 2005, 09:30
Откуда: Краснодар

Сообщение Andrey N. Oktyabrski » 25 июл 2008, 10:08

Так он же написал:
character 0x98 of encoding "WIN1251" has no equivalent in "UTF8"
В таблице перекодировки не найдено соответствия символу с номером 0х98. Опция -с как раз и говорит, что не надо останавливаться на таких символах, просто пропускать их и работать дальше.

Ziggy Stardust
Advanced member
Сообщения: 327
Зарегистрирован: 15 сен 2007, 13:23
Откуда: Екатеринбург
Контактная информация:

Сообщение Ziggy Stardust » 25 июл 2008, 10:14

Andrey N. Oktyabrski писал(а):Так он же написал:
character 0x98 of encoding "WIN1251" has no equivalent in "UTF8"
В таблице перекодировки не найдено соответствия символу с номером 0х98. Опция -с как раз и говорит, что не надо останавливаться на таких символах, просто пропускать их и работать дальше.
Это то я понял. Не понял с какого перепугу в юникоде не нашлось символа из 1251 таблицы. :-) Если б наоборот, то я бы понял...

Ответить

Вернуться в «Серверы - ПО, Базы Данных и их использование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей