Проблема с кодировкой при переносе БД

Главные вкладки

Аватар пользователя rezus rezus 26 июля 2009 в 15:31

Пытаюсь перенести сайт на старом Друпале (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/

Как в данной ситуации победить проблему?

Комментарии

Аватар пользователя Drupal Coder Drupal Coder 26 июля 2009 в 16:13

Лучше делать по ssh, командами mysqldump и mysql, разбить задачу на 2 части:

1. Получить выгрузку с помощью mysqldump чтобы в файле все было UTF8, при необходимости выгружать частями и перекодировать. В начале файла выгрузки должна быть команда SET NAMES UTF8

2. Загрузить файл с помощью mysql в новую базу указав по умолчанию utf8

Аватар пользователя rezus rezus 26 июля 2009 в 16:34

<a href="mailto:sin@drupal.org">sin@drupal.org</a> wrote:
Лучше делать по ssh, командами mysqldump и mysql, разбить задачу на 2 части:

1. Получить выгрузку с помощью mysqldump чтобы в файле все было UTF8, при необходимости выгружать частями и перекодировать. В начале файла выгрузки должна быть команда SET NAMES UTF8

2. Загрузить файл с помощью mysql в новую базу указав по умолчанию utf8

Дамп по SSH у меня уже есть. Я пробовал этот метод. Но без перекодировки. Ничего не вышло, поэтому и стал пробовать dumper-ом.

Сейчас попробую перекодировать его в UTF-8 и развернуть. Один вопрос еще есть. В дампе в командах создания таблиц стоит: "DEFAULT CHARSET=cp1251". Эти указания убрать совсем или поменять на "DEFAULT CHARSET=utf-8"?

Аватар пользователя Drupal Coder Drupal Coder 26 июля 2009 в 16:54

Ну если оно выгрузилось в cp1251 то можно указания не переделывать, тогда в начале файла вставить SET NAMES CP1251 и можно не перекодировать. Надо бы посмотреть в какой кодировке оно храниться в старой базе и сделать также, а то можно еще и багов огрести при переходе на другой чарсет.

Аватар пользователя Drupal Coder Drupal Coder 26 июля 2009 в 16:56

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

Аватар пользователя zr79 zr79 27 июля 2009 в 0:23

там по идее можно добавить в момент соединения с БД в модуле работы с БД одну PHP-команду которая будет сама на лету перекодировать все текстовые поля. Понимаю, что это ламеровато, и что возможно замедление работы на несколько процентов, зато быстрее всего делается. Если проблема ещё актуальна, скинь в личку параметры доступа или хотя бы ссылку на бекап сайта. Я попробую поменять модуль и скажу тебе где и чего поменял.

Аватар пользователя rezus rezus 7 октября 2009 в 16:18

Подниму старую тему. Времени заниматься переездом у меня не было. А вчера удалось таки правильно и в верной кодировке развернуть базу на новом хостинге. Теперь у меня БД в 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.