Hostenko — лучший WordPress-хостинг

И снова проблемная кодировка latin1

На этот раз попалась такая экзотика как база в кодировке latin1 c collation latin1_bin. Это уже третий пост (первый и второй) на тему latin1 и чувствую не последний, т.к. криворукость хостеров не знает границ:

Вчера я часа 3 мучался на своем сервере импортировал дамп этой базы и так и сяк, но максимум чего удавалось добиться это вернуть все на 90%, с пропажей всех кириллических букв С, Я и еще какой то, уже не помню.

Загружать базу пробовал и phpmyadmin’ом и скриптом bigdump и в консоле сервера с разными командами. Ничего не помогало.

Сегодня утром решил продолжить изыскания:

  • Мне предоставили доступ к панели хостинга где была эта “кривая” база, где я нашел базу в формате файлов базы mysql (fmt myd myi) и скачал все файлы локально. При просмотре файлов в LISTER’е тоталкомандера увидел что русские буквы там читабельны при установке кодировки просмотра в utf8. 
  • Скачал набор topserver чтобы настроить рабочую среду на компьютере. Можно и Денвер или другой аналог. Этот мне посоветовали недавно, сам ранее не пользовался никакими наборами. Все работает там без всяких танцев с бубнами и быстро.
  • Изменил настройки мускула в My.cnf везде прописав кодировку latin1 и collation latin1_bin
  • Создал пользователя и базу с нужным названием
  • Закачал в папку “сайта” голый движок WP2.3.3 (можно и 2.5.* и любой другой под который у вас сделана база)
  • Скопировал все файлы базы mysql в директорию новой базы (название директории в папке данных мускула соответствуют названию базы). В винде и линуксе это одинаково. Про bsd не знаю (не работал в ней). Конечно можно попробовать и просто импортировать дамп с кривой базой, но не факт что фишка прокатит. Хотя с перенастроенным мускулом может быть и заработало бы. Проверять не стал.
  • Далее в конфиге WP я прописал жестко кодировку latin1 вместо utf8 как там есть изначально. Вуаля, сайт отображается корректно на русском. Мы своего добились и дальше действуем по схеме, которую я описывал более года назад, см ниже.
  • Ставим плагин бэкапа базы данных
  • Экспортируем базу при текущих настройках, не забыв выделить все нужные таблицы.
  • Полученный дамп уже в корректной кодировке utf-8 и нормально открывается редактором utf8
  • Делаем поиском и заменой: 1) COLLATE=latin1_bin меняем на пустое место (удаляем вообще). 2) CHARSET=latin1 меняем на CHARSET=utf8. 3) collate latin1_bin меняем также на пустое место (удаляем вообще)
  • Сохраняем файл в кодировке utf-8
  • Убеждаемся еще раз в каком нибудь LISTER’е от  тоталкомандера что в режиме utf8 у нас все великолепно читается
  • Заходим в phpmydmin (уже на сервере, а не на локалхосте) и удаляем все таблицы в базе. После этого на закладке ОПЕРАЦИИ меняем сравнение с latin1_bin на utf8_general_ci
  • Импортируем новый правильный дамп базы через phpmyadmin в эту пустую базу
  • В wp-config.php меняем слово latin1 на utf8
  • Радуемся жизни дальше :-) 

Если что то не получилось, то просматриваем все пункты по порядку еще раз. Также нужно учесть что файлы более 3мб редактор unicedit не очень любит и может ругаться на память, но после выдавания ошибки все работает дальше. Поэтому если это возможно то дамп БОЛЬШИХ таблиц делайте отдельным файлом.

Если вы сами не в состоянии справитсья с проблемой, то я могу это сделать за скромную сумму 10wmz(250руб) (webmoney|яндекс.деньги|на мобильник). Контакты найдете здесь на сайте.

PS а вот и сайт, на котором была проблема с кодировкой. Загляните, интересные ролики.

Связанные записи

15 комментариев

  1. 1 Василий 4 мая 2008 в 22:21 (GMT+6)

    респект!


  2. 2 Вадим 4 мая 2008 в 22:39 (GMT+6)

    извращенцы


  3. 3 Василий 5 мая 2008 в 0:39 (GMT+6)

    извращенцы

    Респект!


  4. 4 art 5 мая 2008 в 2:06 (GMT+6)

    пока существует куча кодировок, с ними буду проблемы. выход один — прийти к власти и запретить все нах кроме одной (:


  5. 5 TheBlackRavan 5 мая 2008 в 14:21 (GMT+6)

    Рецепт как перекодировать все таблицы в базе для WP в нужную кодировку при условии что русские буквы по какимто причинам отображаются не так как надо. :)


  6. 6 Komarik 6 мая 2008 в 1:37 (GMT+6)

    Наверное уже стоит базу проблематичных хостеров создавать, которые такие подарки могут преподнести.


  7. 7 хостинг :) 8 мая 2008 в 17:03 (GMT+6)

    Маленький комментарий от этого конкретного хостинга,
    который заключается в том, что клиент сам при создании базы выбирает кодировку. Для PHP 4 несколько лет назад это был лучший вариант.
    Сейчас такую базу на нашем хостинге создать можно только долго и неправильно выбирая параметры.


  8. 8 Lecactus 8 мая 2008 в 20:18 (GMT+6)

    Маленький комментарий от этого конкретного хостинга,

    Стоит FAQ на хостинге обновить наверное. И написать подробнее про смену кодировок, чтобы пользователи потом не страдали. И как вообще повлиять могло то что обновили РАБОТАЮЩУЮ систему wp2.3.3 до 2.5.1 и при этом умерла кодировка, хотя на всех хостингах даже с кодировкой win1251 все происходит в большинстве случаев нормально. А с latin1 одни проблемы и не только в WP. Ко мне уже обращались люди с просьбой восстановить из этой “хорошей” кодировки свои базы сайтов. Отсюда и столько разных способов появилось о которых я периодически пишу здесь, т.к. каждый отдельный случай может отличаться. Досточно погуглить на тему latin1 utf8 чтобы понять что проблема масштабна и реально описаний как все исправить почти нет


  9. 9 Йа 9 мая 2008 в 14:27 (GMT+6)

    1GB вообще странный хостинг – годится только для сайтов-визиток с посещаемостью стремящейся к нулю.
    Там много к чему претензии можно иметь, кодировка БД даже не во главе списка.


  10. 10 LaFut 13 мая 2008 в 20:59 (GMT+6)

    До сих пор с ужасом вспоминаю как делал подобное для базы инвиженовского форума… правда мне попался еще более сложный случай потому что в базу латин писался уникод который реально был текстом в koi8-r :) сидел и вручную дамп конвертил :)


  11. 11 Вадим 13 мая 2008 в 21:40 (GMT+6)

    раздули проблему, если данные реально представляют ценность то, все эти процедуры можно сделать за очень и очень скромную сумму у профи…


  12. 12 Lecactus 13 мая 2008 в 21:53 (GMT+6)

    раздули проблему, если данные реально представляют ценность то, все эти процедуры можно сделать за очень и очень скромную сумму у профи…

    некоторых жаба давит (вспоминая как один тут давно просил помочь переделать ему базу галереи одной), но нахаляву вообще а потом еще и возмущался тут и на форуме галереи что его послали


  13. 13 igrok54 22 июня 2008 в 15:05 (GMT+6)

    PS а вот и сайт, на котором была проблема с кодировкой. Загляните, интересные ролики.

    На Вашем сайте путаница с кодировкой… Вперемешку то нормальные строки русскими буквами, то знаки вопросов сплошь.


  14. 14 Lecactus 22 июня 2008 в 17:52 (GMT+6)

    На
    document.write(‘‘)
    //–>Вашем сайте
    document.write(‘
    ‘)
    //–>

    1 сайт не мой
    2 причины проблемы не знаю – спросите у авторов сайта что они меняли. все было нормально


  15. 15 andrew 2 сентября 2008 в 19:08 (GMT+6)

    До сих пор с ужасом вспоминаю как делал подобное для базы инвиженовского форума… правда мне попался еще более сложный случай потому что в базу латин писался уникод который реально был текстом в koi8-r :) сидел и вручную дамп конвертил :)

    Интересно, а если дамп занимает 100-200 Мб то задача не решаема? :)
    Только что отконвертил базу слитую чарез phpmyadmin. Поля с дефолтной кодировкой – latin1, в которые данные писались в ср1251 и естественно крокозяблы а не дамп. Решилось все очень просто
    cat db_duml.sql |iconf -c -f utf-8 -t latin1 > db_dump_iso.sql возвращием дамп в исходное состоянии, т.к. mysql считает что данные хранятся в латин1 а кодировка клиента(ПХП) – utf-8 и естественно не правильно их конвертит
    cat db_dump_iso.sql |iconv -c -f latin1 -t cp1251 |replace “latin1″ “cp1251″ > dump_cp.sql конвертим в cp1251 и заменяем в дампе латин1 на cp1251
    после этого в начало файла дампа добавляем запись SET NAMES cp1251;
    При необходимости в скриптах после mysql_connect() mysql_select_db() добавляем mysql_query(‘SET NAMES cp1251′)

    Наверно все таки не криворукость хостеров ключевой момент


Комментарии не по теме удаляются! Читайте реадми дистрибутива, комментарии выше и FAQ! Прежде чем задавать вопрос, прочитайте это. Научитесь ценить чужое время!

 Имя (обязательно)  EMAIL (обязательно)  АДРЕС ЛИЧНОГО БЛОГА

Вы соглашаетесь с правилами


При добавлении HTML|CSS|JS|PHP кода в комментарий, оформляйте его через кнопку КОД

 

Получать комментарии по RSS Адрес трэкбека