Как перекодировать дамп БД из Windows-1251 в UTF-8

Ugnich_Andrey

Новичок
Как перекодировать дамп БД из Windows-1251 в UTF-8

Здравствуйте.

Перевожу сайт из кодировки Windows-1251 в UTF-8.

Все контент-файлы перекодировал скриптом:
PHP:
...  // для каждого контент-файла
$arr_strings = file($path_to_file);
$phpfd=fopen($path_to_file,"w+");
for($i=0; $i<sizeof($arr_strings); $i++){
$utf8str = iconv("windows-1251","UTF-8",$arr_strings[$i]);	
$utf8str = str_ireplace("cp1251","utf8",$utf8str);
fputs($phpfd, $utf8str, 1024);
...
Все получилось прекрасно.
Сделал дамп базы Sypex Dumper'ом. Открыл редактором, заменил все строки:
"DEFAULT CHARSET=cp1251"
на
"DEFAULT CHARSET=utf8";
сохранил.

Попытался восстановить базу из этого дампа, Sypex выдал сообщение о некорректном запросе.
Вернул все в исходное положение, попытался обработать файл приведенным скриптом. Тоже самое.

Подскажите, пожалуйста, кто сталкивался.

P.S.: Поиском пользовался подобные ситуации описаны, но рецепты не подошли.
Может я еще что-то упустил?
 

Ugnich_Andrey

Новичок
Пробовал.

mb_convert_encoding($str,'CP1251','UTF-8');

выдал фатальную ошибку, видно нет в денвере чего-то из серии mb_*
 

Major

Новичок
Ugnich_Andrey

У меня тоже были проблемы с дампом., но я вот не стал париться. Написал свою функцию для перекодировки и юзаю ее. Функцию написать, где тупо меняется символ 1й кодировкина другую - 5 минут.
 

boombick

boombick.org
iconv -c -f CP1251 -t UTF-8 -o utf.dump.sql cp1251.dump.sql
Весело и вкусно, макдональдс :)
 

Nelius

кипарис во дворе
Автор оригинала: boombick
iconv -c -f CP1251 -t UTF-8 -o utf.dump.sql cp1251.dump.sql
Весело и вкусно, макдональдс :)
[offtop]
Хе-хе запустить для дампа бд размером 100Гб ;)))
[/offtop]
 

Gas

может по одной?
Nelius
не думаю что даже в этом случае iconv сольёт mb_convert_encoding+чтение кусками (правда не тестил :).
 

vovanium

Новичок
Ugnich_Andrey
Сделал дамп базы Sypex Dumper'ом. Открыл редактором, заменил все строки:
Дампер не перекодирует сам контент.
Если есть исходная база в cp1251 и MySQL версии 4.1 или выше, то достаточно сделать так.
Ставишь в dumper.php (версия 1.0.8)
define('CHARSET', 'utf8');
define('RESTORE_CHARSET', 'force->utf8');

Делаешь бэкап дампером, и им же восстанавливаешь. При бэкапе дампер будет выдавать предупреждения, что кодировка соединения не совпадает с кодировкой таблиц, это нормально :)

После восстановления база будет в UTF8, и ничего руками править в самом дампе не нужно, более того можно его делать со сжатием.

Если базы нет то тогда либо восстанови исходные таблицы в cp1251, и сделай как сказано выше, либо сконвертируй сам файл дампа из cp1251 в utf8, после чего уже заливай.
 

Ugnich_Andrey

Новичок
vovanium, спасибо помог этот метод.
Спасибо всем за участие.

-~{}~ 16.11.07 09:57:

Всплыла проблема...

Теперь в PhpMyAdmin все русские буквы в полях отображаются кракозяблами. И еще, на сайте после перекодировки повылетали буквы "И" и "ш". Вместо них квадратик с вопросом.

Попытки обновить данные через админку результата не дают.

Нашел описание ситуации один-в-один тут. Пересоздал базу, выполнил запросы:
SET CHARACTER SET utf8;
SET NAMES utf8;
Восстановил данные дампером. Кракозяблы остались...

У меня было подозрение, что данные не перекодировались из 1251. Сменил кодировку страницы в phpMyAdmin на 1251: кракозяблы...

Честно говоря, я в тупике посоветуйте, пожалуйста, что можно еще сделать.

-~{}~ 16.11.07 10:03:

Кодировка страниц pma - utf-8
 
Сверху