Оригинал сообщенияПрактически весь день страдал задачей вернуть блог к состоянию как было, чтобы больше мне ниоткуда пропавшие “ш” и “И” не вылезали. Получилось! Очередным стимулом стало письмо от далёкого немецкого друга с советом использовать кодировку latin1_general_ci. Возможно, эта мысль и спасла бы меня, примени я её до того, как начинать что-то делать, но тут никакого эффекта не было.
Поясню суть проблемы: база данных, равно как и таблицы и поля в таблицах были настроены на кодировку
CP1251, в то время как настойчивый Wordpress писал в них данные в
UTF8. А из-за некоторой несовместимости этих кодировок при экспорте-импорте файла в
SQL, буквы “ш” и “И” заменялись на P? и C?. В качестве временной меры я сделал заглушку, которая на лету это заменяла, а сегодня решил взяться за дело более основательно. В итоге на поиск, проверку и применение решения у меня ушло полдня. Поскольку я точно знаю, что я не один такой, рассказываю, вдруг кому поможет.
Решение трудоёмкое, но работает. Сначала надо каждое поле (cодержащее кириллицу) каждой таблицы преобразовать в кодировку binary. Да-да, именно binary. При этом надо помнить, что типы данных тоже преобразуются - text в blob, varchar в varbinary и т.д. А потом вернуть им нормальный тип данных, а кодировку выставить в utf8_general_ci. И так штук пятьдесят полей в 18 таблицах wordpress. Заодно поменять у таблиц и у самой базы данных. После чего залезть в wp-config.php и поменять кодировку там. Если вы работаете с файлом, в котором эти буквы уже были утеряны при экспорте-импорте, то надо будет снова экспортировать, заменить кривые символы на нужные локально (я сегодня скачал очень приятный редактор Notepad++), а затем импортировать обратно.
Замечание: в таблице wp_posts у меня был полнотекстовый индекс, содержащий информацию о related posts. Его пришлось дропнуть, потому что иначе кодировку поменять нельзя.
[показать]LIci WP - WordPress crossposting plugin