... может стоить больших нервов. При переезде на новый хост на днях буквально, случилось то, что обычно случается. База блога отобразилась кракозыбрами. Воевали мы долго, но победили. Дело вот в чем.
Любая версия phpmyadmin конектиться к базе в дефолтной collation мускуля, как правило это latin_1. А мы хотим UTF. Вот и получаются в базе кракозябры и как следствие при переезде на новый хост неправильный дамп базы и тут начинаются проблемы.
На некоторых хостах может спасти вот это в .htaccess:
AddDefaultCharset utf8
CharsetDefault utf8
CharsetSourceEnc utf8
Однако этого мало. Проверьте свою базу через phpmyadmin, наверняка в ней кракозябры. В таком случае Вам поможет следующее.
Ищем замечательную программку под названием Navicat. Эта програмка может конектиться к базе так, как ей скажешь. Подключение настраивается через SSH. Смотрите скриншоты (раз, два, три). Установить всё как там есть и можете подсоединяться. 90% что теперь Вы увидите свою базу на родном языке. Если нет, то нужно что-то придумывать.
Делаем dump базы через эту прогу, сохраняя в текстовый файл. Затем нужно будет открыть этот дамп в текстовом редакторе. Блокнот-подобные оставьте для других целей. Я использовал Dreamweaver 8.
В этом файле нужно сменить все Latin_1 на utf8. В DW8 это делается нажатием CTRL+F (найти и заменить). После этого сохраняете файл и грузитесь через phpmyadmin.
В phpmyadmin первым делом ставите collation mysql utf_unicode_ci. И в созданной для блога базе (пока еще ничего не импортируем, она должна быть пустая) меняем (скорее всего именно «меняем») в Operations latin_1 на utf_unicode_ci.
Если в конце не полчиться, то смените db collation на utf_general_ci
А вот теперь можно заливать отредактированную базу. Это еще не всё. Идём в папку wp-includes нашего блога и открываем в текстовом редакторе файл wp-db.php, в котором ищем строку примерно 57. В этой строке написано:
$this->select ($dbname);
Добавляем следующей строчкой SET NAMES и у нас получиться такое:
$this->select ($dbname);
$this->query («SET NAMES utf8»);
Естественно, залейте его обратно на хост. А теперь можете заходить на главную страницу своего WP-блога и наслаждаться. Если зайдете в phpmyadmin, то там база тоже будет на русском. Поздравляю, Вы справились.
ps. За помощь и советы отдельное спасибо Владимиру и InsaneX.
Вам могут быть также интересны записи по этой теме:
Переезд с Blogger на Wordpress
Как я перевел блог на UTF-8
У этого блога уже более 600 подписчиков. Присоединяйтесь к их числу!
Michael de`OZ
Июнь 29th, 2006 at 12:29 пп
Столько хлопот. Они тогостоят?
Еси изначально всё далаить в юникоде никаких проблем не будет
slaff
Июнь 29th, 2006 at 12:50 пп
Да вот именно, что в самом начале и не знаешь что тебя ждёт. По-большому счету надо бы написать разработчикам ВП, чтобы вписали эту строку. Тогда не должно возникать проблем при начальной инсталяции.
Чуть позже напишу сам.
me2you life » Blog Archive » Возвращение
Июль 29th, 2006 at 2:17 пп
[...] Возвращение оказалось не таким простым… По непонятным причинам… что-то случилось с базой на хосте… Вспомнил недавние проблема Slaff’a с переездом... Почитал его пост “Как вылечить UTF” и последовал его советам. [...]
me2you life | Возвращение
Июль 29th, 2006 at 8:43 пп
[...] Возвращение оказалось не таким простым… По непонятным причинам… что-то случилось с базой на хосте… Вспомнил недавние проблема Slaff’a с переездом... Почитал его пост “Как вылечить UTF” и последовал его советам. [...]
Setti
Август 21st, 2006 at 10:01 дп
Супер! Только что по этому руководству один из блогов поднимал. Полет нормальный.
Только не понял, зачем последние манипуляции с wp-db.php
slaff
Август 21st, 2006 at 1:10 пп
[quote post="557"]Только не понял, зачем последние манипуляции с wp-db.php[/quote]
Чтобы скрипт конектился к базе правильно — в utf. Серверная часть mysql работает в utf, а клиентская (wordpress) в latin1. Отсюда вся фигня и идёт. Я вообще не понимаю, почему перцы из WP до сих пор не добавили эту строку — многим бы юзерам стало легче от этого.
Setti
Август 22nd, 2006 at 2:15 дп
Может потому что разработчики пишут «паанглиски»? :-) Им вообще пох какая кодировка, пусть хоть ее вообще не будет :-)
German
Сентябрь 5th, 2006 at 5:55 дп
И всё-таки есть вопросы :-) :
1. Делаю дамп, как описано здесь — www.linux.by/wiki/index.p...HP_MySQL_charset .В файле дампа базы нет никаких указаний на COLLATION — только DEFAULT CHARSET=cp1251
2. Дамп открываю в Notepad++ — естествено, в таблице wp_posts — «закорючки». Если установить Нотепаду Форматы «Кодировать в UTF8» или «Кодировать в UTF8 (без BOM)» (кстати, какой из них правильно использовать?) — то всё читается.
Что сделать, чтобы на новом хостинге все было в UTF8?
slaff
Сентябрь 5th, 2006 at 10:37 дп
DEFAULT CHARSET=cp1251 нужно заменить DEFAULT CHARSET=utf-8
Редактору нужно установить опцию «Кодировать в UTF8 (без BOM)»
BOM — это невидимая utf-метка в начале файла, из-за неё могут возникнуть проблемы при экспорте файла.
Затем через PHPMYADMIN:
Установить MySQL connection collation — utf_unicode_ci
Потом саму базу тоже установить в utf8_general_ci
Затем исправьте файл wp-db.php, как я описал в посте (добавить set names).
И уже после этого, экспортнуть свою базу через пхпмайадмин (а лучше подключиться и сделать это через NetCat).
German
Сентябрь 5th, 2006 at 1:54 пп
ага — спасибо, почти справился. Почему-то получилось, что база в utf8_unicode_ci, а таблицы — в utf8_general_ci (таблицы создавались при импорте). Но отображается по-русски нормально — надо ли исправлять collation?
slaff
Сентябрь 5th, 2006 at 2:16 пп
Не, у меня именно в этой связке и заработал русский в базе. Буквально только что в группах гугла ru-wordpress, я там пару скриншотов выложил.
๑۩۞۩๑ Партнерские программы • Партнерки • AdultMaster Перенс WordPress-блог на другой хостинг »
Сентябрь 10th, 2006 at 11:48 дп
[...] По-идее, после всех этих манипуляций счастливый блоговладелец увидит свой блог на новом хостинге. На всякий случай рекомендуется это все делать пока есть доступ к старому хостеру. В случае, если Вы увидели свой блог, но на нем все в вопросиках, то рекомендую подправить файлик wp-db.php так, как написал Slaff. [...]
Shavkatov’s Blog » Blog Archive » Как перенести Wordpress на другой хостинг
Сентябрь 10th, 2006 at 3:58 пп
[...] По-идее, после всех этих манипуляций счастливый блоговладелец увидит свой блог на новом хостинге. На всякий случай рекомендуется это все делать пока есть доступ к старому хостеру. В случае, если Вы увидели свой блог, но на нем все в вопросиках, то рекомендую подправить файлик wp-db.php так, как написал Slaff. [...]
Перенс WP на другой хостинг - Wwp.Net.RU - Жизнь Одного Автора
Сентябрь 29th, 2006 at 2:35 дп
[...] По-идее, после всех этих манипуляций счастливый блоговладелец увидит свой блог на новом хостинге. На всякий случай рекомендуется это все делать пока есть доступ к старому хостеру. :) В случае, если Вы увидели свой блог, но на нем все в вопросиках, то рекомендую подправить файлик wp-db.php так, как написал Slaff.Выбирайте новый хостинг, где версия MySQL не меньше 4.1. Сэкономите много нервов и у Вас будет нормально работать поиск.Да, кстати, есть второй метод переноса, если все вышенаписанное Вас не заинтересовало, расстроило, перепугало, или просто вызвало тоску — воспользоваться услугами BlogService. Это будет самый приятный переезд в Вашей жизни. [...]
Ar2r
Март 4th, 2007 at 4:17 пп
Переносил свой сайт. Пришлось немного повозиться. Очень помогла директива --default-character-set=cp1251 у Mysqldump :-)))
Всем советую =)
Setti
Март 5th, 2007 at 4:35 дп
Ar2r, вот бы вам отрезать кое что, чтобы вы гены свои в следующие поколения не передавали...
Ar2r
Март 5th, 2007 at 8:31 дп
За что? У меня в базе cp1251 хранилась инфа в utf8 кодировке =)
Setti
Март 5th, 2007 at 9:41 дп
Да, именно за это.
А вообще за то, что cp1251 присутствует в вашем приложении в принципе
Персональний Смітник » Blog Archive » Yahoo! Переехал на новый хостинг.
Май 2nd, 2007 at 9:59 пп
[...] Для страдающих несварением кодировок, держите линк: Как вылечить UTF … [...]
Айнур
Ноябрь 11th, 2007 at 4:28 пп
Супер! Что только не делал, чтоб убрать эти крякозябрики. Сколько возился в wp-db. А всего-то хватило поставить файл .htaccess.
Спасибо Slaff!!!
theUg
Февраль 9th, 2008 at 3:53 пп
Кстати, за прошедший год, в новых редакциях WP баг исправлен (строка 86 файла из родного дистрибудтива):
if ( !empty($this->charset) && version_compare(mysql_get_server_info(), '4.1.0', '>=') ) $this->query("SET NAMES '$this->charset'");Тимур
Октябрь 29th, 2009 at 1:24 дп
Спасибо большое, фишка прокатила! Теперь с кодировкой все чики-пуки!