ПереездЯ таки перехал, и перевез свои …надцать wp сайтов на новый хостинг. Стоило это немалой крови и нервов потраченных на поиск самого безболезненного пути сконвертировать базы из кракозябр latin1 в нормально читаемый utf8.

Можете меня спросить — «а какого ты держал базы в latin1?» и я отвечу нецензурно, ибо до позавчерашнего дня был уверен что у меня все в utf8. Но нет в жизни «щастя», и мои сборки wp21, не содержали указания на чарсет и тип сравнения, что вообщето не мешало нормально показывать русские буковки, хоть и мешало нормальной сортировке и поиску.

Так что если у вас в wp-config.php нет этих строк: define(’DB_CHARSET’,'utf8′); define(’DB_COLLATE’,'utf8_general_ci’); вы попали. А когда в дампе базы, вместо русского текста видите нечто такое - Прогà - знайте, сейчас вам будет очень весело…

Если кроме дампа на руках ничего нет, то нужно любым способом залить дамп на новый сервер в такой же кодировке что и на старом. А если есть доступ к старому сайту, то делаем следующее:

  1. Открываем базу в phpMyAdmin и делаем дамп структуры базы
  2. Для каждого текстового поля в каждой таблице в которой есть данные на русском, делаем следующие запросы:
    ALTER TABLE table CHANGE field field BLOB;
    ALTER TABLE table CHANGE field field TEXT CHARACTER SET utf8;
  3. Если вы пытаетесь такм способом обработать поле с перечислением (типа: enum(’open’, ‘closed’))и у вас вылезают ошибки — перечитайте пункт 2 еще раз :) и просто не обрабатывайте это поле.
  4. Если все равно появляются ошибки, то скорее всего для этого поля есть индекс. Удалите его, и повторите запросы.
  5. Для каждой таблицы сделайте запрос
    ALTER TABLE table DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  6. Сохраните и откройте дамп в каком-либо редакторе (не notepad!) поддерживающем utf8, например Editor++, и замените все вхождения latin1 на utf8. Если удаляли индексы — восстановите их по сохраненной ранее структуре.
  7. На этом все, можно импортировать.

Сакральный смысл этих танцев с бубном в том что пре переводе текстового поля в блоб и обратно, но в другой чарсет — получается правильная конвертация. Если любите нетрадиционный секс, попробуйте сразу сменить чарсет, без перевода в блоб, секс гарантирован :razz:

Пункт 5 необязателен к исполнению, мы все равно потом меняем latin1 на utf8, но так всетаки спокойнее.

Если вам нужно чтобы после конвертации работал и старый сайт, добавьте define('DB_CHARSET','utf8'); define('DB_COLLATE','utf8_general_ci'); в wp-config.php, или вместо текста на сайте будут одни знаки вопроса.

Удачного вам переезда. Мой продлился всего три дня, и я (кажется) ничего из данных не потерял :razz: