• данные в таблицах базы данных, а именно текстовая информация, отображается иероглифами, можно ли как-то перекодировать это целиком во всей базе данных, в приложенном скрине указан отдельный пример того что произошло

    View post on imgur.com

    слишком много статей, замена текста каждой и пересохранение займет очень много времени…

    На сколько я понял, это произошло в результате того, что в файле wp-config.php была указана кодировка cp1251 вместо utf8 и теперь в админке и на сайте все отображается кирилицей, а в базе данных вся кирилица сохраняется именно в таком виде, при попытке выставить в wp-config.php кодировку utf8 все эти иероглифы вылезают на сайт, да это и понятно…

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Попробуйте так (предварительно сделав резервную копию):

    
    ALTER TABLE wp_commentmeta CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE wp_comments CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE wp_links CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE wp_options CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE wp_postmeta CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE wp_posts CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE wp_termmeta CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE wp_terms CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE wp_term_relationships CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE wp_term_taxonomy CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE wp_usermeta CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    ALTER TABLE wp_users CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
    

    После этого можно указать utf8 в wp-config.php.

    Я делал так, у таблиц меняется сравнение, но иероглифы внутри самой таблицы остаются в полях post_content, post_title и т.д. остаются…

    Похоже придется экспортировать и декодировать по частям через notepad++ или(если не получится) через декодеры

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    иероглифы внутри самой таблицы остаются

    А в свойствах базы на вкладке «Операции» какая кодировка? И какую показывает phpMyAdmin на первой странице после входа?

    На входе в Основных настройках Сопоставление кодировки соединения с MySQL — utf8_general_ci

    Для самой базы данных Сравнение для каждой из таблиц базы и самой базы — cp1251_general_ci

    Не уверен точно, но может поможет https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
    Скрипт умеет обрабатывать отдельные таблицы и по моему есть конвертация в UTF8. Только в его коде наверняка нужно будет поправить исходную кодировку — там явно не 1251.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Сравнение для каждой из таблиц базы и самой базы — cp1251_general_ci

    После выполнения запросов ALTER TABLE в свойствах базы тоже нужно указать utf8_general_ci.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Хотя да, этот способ больше подходит для случаев, когда данные изначально читаемы и их нужно просто сконвертировать во избежание будущих проблем. Если нечитаемы — я бы тоже делал через дамп и Notepad++ (там нужно после приведения в читаемый вид не забыть везде поменять cp1251 на utf8).

    Модератор Юрій

    (@yube)

    Это так называемый P-utf (еще бывает аналогичный D-utf). У WP такое если и было, то лет 10 назад. С vBulletin случалось часто, потому я с этой бедой знаком.

    Сомневаюсь, что получится по-простому перегнать через дамп.

    Обычно такое лечится «прикладыванием» жуткой «конструкции», типа вот такой
    UPDATE post SET title = CONVERT(CONVERT(CONVERT(title USING cp1251) USING binary) USING utf8);
    к каждому текстовому полю в каждой таблице.

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

    Благодарю за помощь! Решил вопрос следующим образом:

    — выкачал дамп базы данных (сделал копию файла на всякий случай)
    — открыл файл дампа программой Notepad++
    — нашел и заменил весь текст в файле содержащий «cp1251» на «utf8» и сохранил
    — скачал программу перекодировщик Recoder v2.1
    — скопировал целиком весь текст из файла дампа базы данных и вставил в программу Recoder v2.1
    — произвел перекодировку вставленного текста из utf-8 в windows-1251
    — скопировал полученный результат, заменил им текст в файле дампа базы данных и сохранил (предварительно убедился, что кодировка файла не изменилась и стоит utf-8 без ВОМ)
    — поменял в phpMyAdmin для всей базы данных в разделе Операции в пункте Сравнение cp1251_general_ci на utf8_general_ci
    — удалил таблицы текущей базы данных в phpMyAdmin и загрузил обновленный файл дампа базы данных
    — в файле wp-config.php указал кодировку utf8 вместо cp1251

    Результатом вышеуказанных действий, текущая информация на сайте и в таблицах базы данных стала отображаться правильно без иероглифов, но остался небольшой глюк перекодировки, почему-то при перекодировке вместо буквы в верхнем регистре «Р» отображалось «?_», а в место буквы в верхнем регистре «И» — «??» пришлось воспользоваться плагином Better Search Replace дабы произвести замену в таблицах базы данных этих элементов.

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Тема «Декодировать иероглифы в базе данных» закрыта для новых ответов.