Подскажите как перекодировать базу из Win1251 в utf8?
Модераторы: Trinity admin`s, Free-lance moderator`s
-
- Advanced member
- Сообщения: 327
- Зарегистрирован: 15 сен 2007, 13:23
- Откуда: Екатеринбург
- Контактная информация:
Подскажите как перекодировать базу из Win1251 в utf8?
Ситуация следующая. Есть сервер СУБД 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;
Что можно придумать?
В нем есть база с родной кодировкой 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;
Что можно придумать?
-
- Advanced member
- Сообщения: 327
- Зарегистрирован: 15 сен 2007, 13:23
- Откуда: Екатеринбург
- Контактная информация:
Да нет, похоже это в самом деле что-то в тексте не то.
Iconv на том же самом месте обламывается при попытке им переконвертить SQL скприпт из 1251 в юникод.
iconv -c -f cp1251 -t utf-8 ... отработал. Попробую что получилось в копию базы залить и подцепить к копии приложения...
Линукса к сожалению нету в доступе, чтобы экперимент провести.
Iconv на том же самом месте обламывается при попытке им переконвертить SQL скприпт из 1251 в юникод.
iconv -c -f cp1251 -t utf-8 ... отработал. Попробую что получилось в копию базы залить и подцепить к копии приложения...
Линукса к сожалению нету в доступе, чтобы экперимент провести.
-
- Advanced member
- Сообщения: 229
- Зарегистрирован: 25 окт 2005, 09:30
- Откуда: Краснодар
-
- Advanced member
- Сообщения: 327
- Зарегистрирован: 15 сен 2007, 13:23
- Откуда: Екатеринбург
- Контактная информация:
-
- Advanced member
- Сообщения: 229
- Зарегистрирован: 25 окт 2005, 09:30
- Откуда: Краснодар
-
- Advanced member
- Сообщения: 327
- Зарегистрирован: 15 сен 2007, 13:23
- Откуда: Екатеринбург
- Контактная информация:
Это то я понял. Не понял с какого перепугу в юникоде не нашлось символа из 1251 таблицы. :-) Если б наоборот, то я бы понял...Andrey N. Oktyabrski писал(а):Так он же написал:
character 0x98 of encoding "WIN1251" has no equivalent in "UTF8"
В таблице перекодировки не найдено соответствия символу с номером 0х98. Опция -с как раз и говорит, что не надо останавливаться на таких символах, просто пропускать их и работать дальше.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя