Вот же послал нам высший разум наказание в виде так называемой
СУБД MySQL. Неважно, как круто корпорация
Oracle выглядит в бизнес отчетах, важно, что ваши бесценные данные могут испортиться в результате простой операции
архивного копирования. А если архивируется база
mediawiki, где в односимвольных кодировках записаны строки в UTF-8, которые при бэкапе будут побуквенно переведены в UTF-8... Удивительно, но есть люди, которые даже могут во всем этом
разобраться.
Из кириллического подмножества символов
UTF-8 почему-то
не повезло буквам "ш" (0xD188) и "И" (0xD098). Вместо них пишутся в файл коды 0xD13F и 0xD03F.
Лечим следующим образом. После восстановления из архива базы
mediawiki сформируем запросы для обновления символьных полей. Для буквы "И":
SELECT
CONCAT('UPDATE ', table_name, ' SET ', column_name,
' = REPLACE(', column_name, ',
CONCAT( CHAR(208), CHAR(63) ),
CONCAT( CHAR(208), CHAR(152) ));')
FROM columns
WHERE
table_schema = 'your_schema_name_here'
AND data_type = 'varchar'
И для буквы "ш":
SELECT
CONCAT('UPDATE ', table_name, ' SET ', column_name,
' = REPLACE(', column_name, ',
CONCAT( CHAR(209), CHAR(63) ),
CONCAT( CHAR(209), CHAR(136) ));')
FROM columns
WHERE
table_schema = 'your_schema_name_here'
AND data_type = 'varchar'
Результаты приведенных запросов -- готовые SQL команды для замены неправильных последовательностей байтов на правильные во всех строковых полях. Экспортируем их в текст и выполняем на базе данных.
UPD: Версия
MySQL 5.5.32-cll-lve. Бэкап базы данных через
phpMyAdmin 4.1.8 и
cPanel 11.42.1.
Комментариев нет:
Отправить комментарий