Пытаюсь перенести сайт на старом Друпале (4 версия) с Мастерхоста на Дримхост. Для переноса БД пользовался скриптом dumper. В результате переноса сайт выглядит вот так:
Какие-то проблемы с кодировками.
Вот параметры исходной базы на Мастерхосте:
character_set_client cp1251
character_set_connection cp1251
character_set_database cp1251
character_set_filesystem binary
character_set_results cp1251
character_set_server cp1251
character_set_system utf8
character_sets_dir /usr/local/mysql50/share/mysql/charsets/
Вот параметры новой базы на Дримхосте:
character_set_client latin1
character_set_connection latin1
character_set_database latin1
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir /data/mysql/yedid/share/mysql/charsets/
Как в данной ситуации победить проблему?
Комментарии
Лучше делать по ssh, командами mysqldump и mysql, разбить задачу на 2 части:
1. Получить выгрузку с помощью mysqldump чтобы в файле все было UTF8, при необходимости выгружать частями и перекодировать. В начале файла выгрузки должна быть команда SET NAMES UTF8
2. Загрузить файл с помощью mysql в новую базу указав по умолчанию utf8
Дамп по SSH у меня уже есть. Я пробовал этот метод. Но без перекодировки. Ничего не вышло, поэтому и стал пробовать dumper-ом.
Сейчас попробую перекодировать его в UTF-8 и развернуть. Один вопрос еще есть. В дампе в командах создания таблиц стоит: "DEFAULT CHARSET=cp1251". Эти указания убрать совсем или поменять на "DEFAULT CHARSET=utf-8"?
Ну если оно выгрузилось в cp1251 то можно указания не переделывать, тогда в начале файла вставить SET NAMES CP1251 и можно не перекодировать. Надо бы посмотреть в какой кодировке оно храниться в старой базе и сделать также, а то можно еще и багов огрести при переходе на другой чарсет.
Проверить в той ли кодировке оно выгрузилось, в которой будем пытаться загружать, можно полистав файл выгрузки в текстовом редакторе в этой кодировке.
там по идее можно добавить в момент соединения с БД в модуле работы с БД одну PHP-команду которая будет сама на лету перекодировать все текстовые поля. Понимаю, что это ламеровато, и что возможно замедление работы на несколько процентов, зато быстрее всего делается. Если проблема ещё актуальна, скинь в личку параметры доступа или хотя бы ссылку на бекап сайта. Я попробую поменять модуль и скажу тебе где и чего поменял.
Подниму старую тему. Времени заниматься переездом у меня не было. А вчера удалось таки правильно и в верной кодировке развернуть базу на новом хостинге. Теперь у меня БД в utf8 и все данные в ней тоже utf8. Но обнаружилась новая проблема. Мой хостер по умолчанию делает коннект к базе в кодировке latin1. И из-за этого весь контент выводится знаками вопроса. Я пробовал вставить в файл database.mysql.inc в функцию db_connect() в самом конце, перед return вот такой код:
<?php mysql_query("SET NAMES 'utf8';",$connection);
mysql_query("SET CHARACTER SET 'utf8';",$connection);
mysql_query("SET SESSION collation_connection = 'utf8_general_ci';",$connection);?>
И тогда смог увидеть сайт с правильными русскими буквами. Однако увидеть его я смог всего один раз. Те страницы, которые после просмотра попадали в кэш, переставали отображаться (просто белый экран). А если очистить таблицу с кэшем, то странички начинали снова отображаться. Подозреваю, что нужно аналогичный код вставить куда-то еще, где идет запись кэша в БД. Однако где это - пока не нашел. Может кто подскажет?
Ну и конечно в идеале хотелось бы решить вопрос с коннектом к базе без исправления кода Друпала. Не знаю правда получится ли это сделать на моем хосте. Задал вопрос саппорту, можно ли как-то настроить кодировку коннекта по умолчанию. Может у кого есть опыт и идеи по этому поводу? Хостинг виртуальный. Dreamhost.