Оригинальный способ изменения кривой кодировки latin1 в ваших базах mysql на UTF8 или CP1251

Кроме манипуляций с импортом-экспортом и перекодировкой базы WordPress с помощью шаманства, существует и другой способ. Процесс долгий, но результат 100%-ый. Сегодня меня попросили перекодировать одну базу (не WordPress), которая также была когда то создана в неправильной кодировке latin1 и при переезде на новый хостинг, где в базе кодирова cp1251 (например мастерхост) и сайт превратился в кашу из мусора. Попробовав сначала рекомендации из различных форумов решил попробовать на кусочке текста во всем знакомом творении компании МС под именем Microsoft Word (использовался Word2003, но должно работать и на остальных версиях). Дело в том что в Ворде существует замечательная система восстановления поврежденного текста, которая не раз выручала при открытии файлов, созданных в древних версиях того же Ворда. Опыт над кусочком базы прошел успешно и я запустил процесс над всем файлом. Для статистики — размер базы на входе 5мб, на выходе при сохранении в Windows-1251 получилось 3,6мб. Весь процесс на компьютере P4-3200/1gb pc5300 занял более 1,5часов. Все это время Ворд был в полуподвешенном состоянии и не подавал признаков жизни кроме медленно ползущего ползунка в диалоге конвертации. После того как все будет готово, мы меняем везде где требуется упоминание о кодировке как в примере ниже:

CREATE DATABASE `kakayatobaza` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;

на cp1251

CREATE DATABASE `kakayatobaza` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;

или utf8

CREATE DATABASE `kakayatobaza` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

проще всего это делать поиском-заменой

и сохраняем файл в соответствующей кодировке! Чтобы было все наглядно понятно, создал небольшую видеоинструкцию по применению.

смотреть в действии (всего 300кб)

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

54 комментария на запись “Оригинальный способ изменения кривой кодировки latin1 в ваших базах mysql на UTF8 или CP1251”

  1. sonika 12 января 2008 в 5:07

    Это круто!! Как раз то, что нужно, большое спасибо за видео и за инструкцию!

  2. Lynx 12 января 2008 в 6:11

    Штирлиц наш, думаю бырее и не хуже сделает, мы так и делали, особенно остро при переходе с мускула 4-го на 4.1 с утф системой кодировки по умолчанию.

  3. Lecactus 12 января 2008 в 11:15

    Штирлиц наш, думаю бырее и не хуже сделает

    скачал штирлица. изголялся он с кодировками на тестовом куске дольше ворда раза в 2 и выдал еще большую кашу. результат смотреть здесь

    можете скачать тестовый пример и попробовать самостоятельно раскодировать, только напишите потом какие последовательности были

  4. Участник ********* 13 января 2008 в 19:02

    Есть несколько методов и попроще все сделать

  5. Lecactus 13 января 2008 в 19:19

    Есть несколько методов и попроще все сделать

    ну так написали бы для примера.
    PS не надо больше спамить с именем Участник XXX. здесь такое не прокатит

  6. mikolka 14 января 2008 в 14:12

    Жесть какая, но тем не менее прикольно =) Word помощник сисадимнов…

  7. sonika 14 января 2008 в 16:31

    Чорт, 2007 ворд отказывается, говорит «слишком много ошибок» :)))

  8. Lecactus 14 января 2008 в 16:53

    2007 ворд

    2007офис вообще ужасный. возвращайся на 2003 :)

  9. i_mon 30 января 2008 в 0:11

    Я думаю можно еще проще и быстрее.
    1. Берем Total Commander
    2. F3 на файле -> Вид -> выставляем кодировку что бы было читаемо
    3. ctrl+A -> ctrl+C
    4. Создаем пустой файл, сохраняем в нужной кодировке
    5. ctrl+V
    6. Запускаем поиск с заменой CHARSET=стар_кодировка CHARSET=новая_кодировка.

  10. Lecactus 30 января 2008 в 0:14

    Берем Total Commander
    2. F3 на файле -> Вид -> выставляем кодировку что бы было читаемо

    пробовал все — не читает нормально ТОТАЛ эти кривые дампы. даже корректный UTF8 читает с ошибками иногда

  11. i_mon 30 января 2008 в 0:27

    Ok. Берем другое, что читает и повторяем с пункта №3

    Сегодня я небольшой дамп таким образом восстановил.

  12. Lecactus 30 января 2008 в 0:32

    Берем другое, что читает и повторяем с пункта №3
    Сегодня я небольшой дамп таким образом восстановил.

    если можно выложите кусочек вашего дампа, который вы восстанавливали — для тестирования. кстати есть еще и такой прикол что некоторые кривые дампы наполовину в одной кодировке, наполовину в другой. с ними сложнее бывает

  13. i_mon 30 января 2008 в 1:47

    Только что посмотрел ваш образец. Мой был попроще. Я с такими тяжелыми случаями и не сталкивался. В этом случае действительно быстрее использовать Word…
    Какими же кодировками его так перемешали?

  14. i_mon 30 января 2008 в 1:50

    А Штирциц 4.0 однако прочитал ваш образец.
    1. отключаем галочку декодировать при загрузке
    2. открываем файл
    3. UTF -> Раскодировать UTF-8

  15. sonika 30 января 2008 в 2:41

    Снесла ворд 2007, поставили 2003. Все равно облом! Делаю все по видео инструкции, а на выходе — те же самые кракозяблы, т.е. без изменений. Нателепатьте пжлста, что я могу делать не так?

  16. Lecactus 30 января 2008 в 8:38

    те же самые кракозяблы, т.е. без изменений.

    образец кода выложи — посмотрим

  17. sonika 30 января 2008 в 20:26

    Вот кусочек исходного .sql:
    --
    -- Структура таблицы `wp_postmeta`
    --

    CREATE TABLE `wp_postmeta` (
    `meta_id` bigint(20) NOT NULL auto_increment,
    `post_id` bigint(20) NOT NULL default '0',
    `meta_key` varchar(255) default NULL,
    `meta_value` longtext,
    PRIMARY KEY (`meta_id`),
    KEY `post_id` (`post_id`),
    KEY `meta_key` (`meta_key`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1615 ;

    --
    -- Дамп данных таблицы `wp_postmeta`
    --

    INSERT INTO `wp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES
    (83, 14, 'keywords', 'мыс видный, санаторий в сочи, путевки в сочи, лечение, цены'),
    (86, 14, 'description', 'Санаторий «Мыс Видный» расположен в экологически чистом районе, в пос. Хоста г. Сочи.'),
    (98, 24, 'description', 'Оздоровительно-развлекательный комплекс «АкваЛоо» находится вблизи курортного поселка Лоо.'),
    (99, 24, 'keywords', 'аквалоо, развлекательный комплекс, аквапарк, сочи, лоо, отдых, аква лоо'),
    (106, 25, '_wp_attached_file', '/home/s/spasochiru/public_html/wp-content/uploads/akvalo-spec-16052007.doc'),
    (107, 25, '_wp_attachment_metadata', 'a:0:{}'),
    (114, 26, 'description', 'Санаторий им. Орджоникидзе расположен Центральной части Сочи на территории вечнозеленого парка'),
    (117, 26, 'keywords', 'санаторий орджоникидзе, сочи, отдых, цены, лечение в сочи'),
    (134, 32, '_wp_attached_file', '/home/s/spasochiru/public_html/wp-content/uploads/akter2007.doc'),
    (135, 32, '_wp_attachment_metadata', 'a:0:{}'),

  18. Lecactus 30 января 2008 в 22:02

    Вот кусочек исходного .sql:

    решается так:
    — устанавливаем THE BAT (если еще нету)
    — создаем новое письмо в кодировке win1251
    — вставляем этот кривой код туда
    — сохраняем письмо как черновик
    — просматривая этот черновик выбираем в контекстном меню ПЕРЕКОДИРОВКА и … получаем чистейший русский текст без «кракозябр».

    можно конечно сохранить файл и в текстовом редакторе в кодировку 1251, открыть в браузере и там выбрать режим УТФ8, но так получается русский текст с всякой гадостью вроде спецсимволов

    вот результат декодирования
    ————————————
    INSERT INTO `wp_postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES
    (83, 14, ‘keywords’, ‘мыс видный, санаторий в сочи, путевки в сочи, лечение, цены’),
    (86, 14, ‘description’, ‘Санаторий «Мыс Видный» расположен в экологически чистом районе, в пос. Хоста г. Сочи.’),
    (98, 24, ‘description’, ‘Оздоровительно-развлекательный комплекс «АкваЛоо» находится вблизи курортного поселка Лоо.’),
    (99, 24, ‘keywords’, ‘аквалоо, развлекательный комплекс, аквапарк, сочи, лоо, отдых, аква лоо’),
    (106, 25, ‘_wp_attached_file’, ‘/home/s/spasochiru/public_html/wp-content/uploads/akvalo-spec-16052007.doc’),
    (107, 25, ‘_wp_attachment_metadata’, ‘a:0:{}’),
    (114, 26, ‘description’, ‘Санаторий им. Орджоникидзе расположен Центральной части Сочи на территории вечнозеленого парка’),
    (117, 26, ‘keywords’, ‘санаторий орджоникидзе, сочи, отдых, цены, лечение в сочи’),
    (134, 32, ‘_wp_attached_file’, ‘/home/s/spasochiru/public_html/wp-content/uploads/akter2007.doc’),
    (135, 32, ‘_wp_attachment_metadata’, ‘a:0:{}’),

  19. sonika 31 января 2008 в 2:22

    Отличный способ с Bat!, базу 1,8 мб «перекодировала» за несколько секунд, залила обратно — и все готово! Кстати, Ваня, то что я тебе писала про префиксы непонятные — это были глюки кэша, по крайней мере мне так саппарт моего хостинга объяснил.
    Спасибо за помощь! :) Все так просто оказалось!

  20. Ю.Б. 29 марта 2008 в 18:23

    Тестовый пример Штирлиц обработал без вопросов.

  21. mekal 1 апреля 2008 в 2:43

    Не Ворд, не Штирлиц, не другие редакторы мне не могут помочь. вот кусочек текста, который непонятно в какой кодировке

    quot;summary";s:450:"?????‚?µ?????µ?‚-???????µ

    а вот тут я более подробно расписал проблему http://mywordpress.ru/support/viewtopic.php?pid=15827

  22. Lecactus 1 апреля 2008 в 9:17

    Не Ворд, не Штирлиц, не другие редакторы мне не могут помочь. вот кусочек текста, который непонятно в какой кодировке

    quot;summary";s:450:"?????‚?µ?????µ?‚-???????µ

    а вот тут я более подробно расписал проблему http://mywordpress.ru/support/viewtopic.php?pid=15827

    лучше дамп базы вышлите мылом — адрес найдете в Контактах чтобы было понятнее

  23. Саша 2 апреля 2008 в 0:53

    Нашел достаточно удобный серви для перевода текста из одной кодировки в другую: http://rgo.ru/projects/soft_online/kodirovka/

    Нашел на сайте «География. Планета Земля» ( http://rgo.ru )

  24. Neo_mat 29 апреля 2008 в 14:58

    а не судьба iconv -f latin1 -t cp1251 dump.sql > dump_cp1251.sql?

  25. Василий 1 мая 2008 в 15:00

    Здравствуйте!

    Пробую использовать метод с The Bat!, но программа ничего не перекодирует. После использования функции Перекодировка на странице ничего не меняется ни в одном из режимов. Что я делаю не так?

  26. Lecactus 1 мая 2008 в 15:14

    Здравствуйте!

    Пробую использовать метод с The Bat!, но программа ничего не перекодирует. После использования функции Перекодировка на странице ничего не меняется ни в одном из режимов. Что я делаю не так?

    кусочек дампа отправьте мне на мыло из раздела КОНТАКТЫ

  27. Роланд Чанишвили 27 мая 2008 в 21:52

    На днях перевозил свои блоги, увы твои рекомендации в моем случае не помогли — пришлось конвертить через blob. Чтобы не повторятся и для ссылочки — http://www.chanishvili.org/latin1-to-utf8/

    p.s. интерестно я один такой идиот, который сначала ввел домашний адрес, а уж потом заменил емейлом? :)

  28. Амикецо français aussi 19 октября 2008 в 6:34

    У меня это действие в Ворде вызывает его безвариантный краш. Убил себе сайт lingvomania.инфо совсем…

  29. Lecactus 19 октября 2008 в 10:24

    @Амикецо français aussi: дамп на мыло присылайте. покумекаем

  30. Амикецо français aussi 19 октября 2008 в 21:58

    дамп на мыло присылайте. покумекаем

    Да я поторопился и всё уже восстановил. Дырищщи моих бубноплясок отовсюду торчат, но главное что — тексты читаются, новые добавлять можно. И ладно.
    Не смогу даже описать, как в конечном итоге всё вышло. Вроде делал „по Чанишвили“ (похожий способ с вариациями предлагает и Codex) — но так только posts перекодировались хорошо, а каменты не хотели. Тогда я убил все таблицы, „установил“ Вордпресс и импортировал в него таблицу с постами.

  31. mirra 21 января 2009 в 0:48

    интересно, а такую штуку можно восстановить?
    Îòêëèêè, îáñóæäåíèÿ â ñâÿçè ñ íàøèìè âå÷¸ðêàìè.

  32. Lecactus 21 января 2009 в 0:51

    mirra, ответ: ДА.
    вот что выдал ворд:

    Отклики, обсуждения в связи с нашими вечёрками.

    :-)

  33. mirra 21 января 2009 в 1:25

    ого! :)

    я перед тем как спросить пробовала как раз-таки вордом все варианты — и ничего не получилось.

    и как ворд опознал этот текст? как какую кодировку?

  34. Lecactus 21 января 2009 в 1:35

    mirra, СЕРВИС-ИСПРАВИТЬ ПОВРЕЖДЕННЫЙ ТЕКСТ-РУССКИЙ(РОССИЯ) :)
    вы наверное не так делали что то — я просто скопировал ваш кусок текста и вставил в чистый документ. а если вы выбираете открытие документа то насколько помню надо выбирать либо UTF-8 либо Кирилица(вин-1251) — в общем чтобы в «примере» символы были похожие. на куске текста потренируйтесь.

    ЗЫ Или смените версию ворда :) в 2003-ей точно работает

  35. mirra 21 января 2009 в 3:13

    О, спасибо!

    Целый день мучилась, а тут вон оно как! :) Все получилось.

  36. Lecactus 16 февраля 2009 в 21:03

    если у вас стоит офис2007 то порядок действий немного другой для запуска команды «восстановления» — описано в этом посте http://forum.ru-board.com/topic.cgi?forum=5&topic=16945&start=720#5

  37. Vagur 17 мая 2009 в 22:25

    если у вас стоит офис2007 то порядок действий немного другой для запуска команды «восстановления» — описано в этом посте http://forum.ru-board.com/topic.cgi?forum=5&topic=16945&start=720#5

    первый сайт делал в базе cp1251, сейчас после переезда на новый хостинг с php5 используется база UTF8. у меня вопрос, как из 1251 в UTF8 перекодировать?
    при все при том у меня стоит Oficce 2007.
    а то по вышеприведеной ссылке решение не нашел.

  38. Lecactus 17 мая 2009 в 22:29

    Vagur, http://lecactus.ru/download/ms/eefonts.zip

    вообще если база в 1251 и вся читается в текстовом редакторе нормальном, то поиском-заменой замени везде cp1251_general_ci на utf8_general_ci и cp1251 на utf8 если есть отдельно, и сохрани файл в кодировке UTF8 без BOM и этот полученный дам уже загрузи в чистую базу, созданную также с правильным utf8_general_ci

  39. Vagur 20 мая 2009 в 17:44

    Vagur, http://lecactus.ru/download/ms/eefonts.zip

    вообще если база в 1251 и вся читается в текстовом редакторе нормальном, то поиском-заменой замени везде cp1251_general_ci на utf8_general_ci и cp1251 на utf8 если есть отдельно, и сохрани файл в кодировке UTF8 без BOM и этот полученный дам уже загрузи в чистую базу, созданную также с правильным utf8_general_ci

    тоесть как читается нормально?
    я не могу русские символы прочитать — кракозябра…
    чем ее читать чтобы русские символы читались?
    NPP++ не читает!

  40. Lecactus 20 мая 2009 в 18:30

    Vagur, дамп в мыло пульни

  41. Виктор 7 июля 2009 в 18:46

    Всё работает на УРА! пришлось конечно скосить 2007 Ворд. Но это того стоило. Всё прошло гладко как и на видео. Большое спасибо

  42. Vadim 16 июля 2009 в 17:31

    После восстановления БД на хостере часть таблицы перекатилась с utf8 в latin1_swedish_ci (в частности весь контент оказался в этой кодировке)

    Перепробовал уже все возможные методы-но результата 0

    Вообщем один большой Need Help!!!

  43. Lecactus 16 июля 2009 в 20:33

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

  44. Vadim 16 июля 2009 в 20:48

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

    Так дело в том что и не я восстанавливал. Восстанавливал хостер, после блокировки хостинг-аккаунта. Я так понял что при архивации у них с моей БД случилась такая «бяка», как latin1_swedish_ci во всех «контентных» таблицах.

    В итоге мне досталось это «восстановленное чудо», которое пока никак не хочет приводиться в читабельный вид.

  45. Lecactus 16 июля 2009 в 20:52

    я про то и пишу что хостеры часто через Ж восстанавливают сами. попросите у них дамп файлом и на мыло скиньте мне

  46. Vadim 16 июля 2009 в 21:27

    я про то и пишу что хостеры часто через Ж восстанавливают сами

    Ну аргументом кривого восстановления было: Суть проблемы в том, что мы имеем дело с не совсем стандартной инсталляцией WordPress. Кодировка подключения к базе не была задана в явном виде (строка определения кодировки UTF8 в конфигурационном файле закомментирована). В результате этого в базу, с описанием таблиц UTF8 клались данные в кодировке Latin1. Кроме того, некоторые таблицы базы били созданы в кодировке Latin1. Если такую комбинацию не трогать — она будет работать до первого переноса/восстановления.

    попросите у них дамп файлом и на мыло скиньте мне

    Запросил. Как вышлют-перенаправлю.

  47. Заратустра 6 февраля 2010 в 19:50

    Ну парень — выручил. Огромная благодарность!

  48. kotyara 24 сентября 2010 в 19:22

    5 баллов, я уж думал писец пришел. спасибо, огромное. А то прислали млин дамп… мне аш плакать захотелось: дамп в кодировке утф, на сайте выставлена кодировка 1251, а в дампе указана кодировка латин1… криворукие говноделы! какие кодировки тока не перепробовал, как ни крутил, а кроме стрекозябликов ниче ни видать. А тут раз и все гут) прям благодарность)

  49. Alleon 21 декабря 2010 в 23:46

    Огромное спасибо! Очень простой и действительно рабочий способ.

  50. Niczshe 16 января 2011 в 19:03

    Иван, добрый вечер. Не знаю в какой теме написать, попробую сюда. У меня тоже вылазят различные кракозябры, но это происходит лишь тогда когда я провожу анализ страниц сайта на одном сервисе. Как думаешь стоит ли мне париться по этому поводу? Просто у всех нормально там отображается, а у меня нет. Вот здесь я уже писал о моей проблеме. Заранее спасибо!

  51. Александр 30 сентября 2011 в 23:45

    а у меня с присоединенными файлами проблема!.. Присоединяю, отправляю.. На почте само сообщение читаемо а attachment — нет. Набор всяких символов!! Как побороть?

Трэкбеки и пингбеки

  1. Sonika’s blog » Конструктор форм cforms — теперь на русском!
  2. iAdmins.ru » О перекодировке баз из latin1 в cp1251 или utf8
  3. Переехавши | Сетевой журнал Луганского Медведа