Есть база MySQL, несколько таблиц. Раньше скрипт по крону парсил некоторые данные и писал их в базу как есть — в cp1251. Позже переделали скрипт, теперь он перед записью перегоняет текст в utf-8. Собственно, сейчас база в таком состоянии, что половина базы в utf-8 и отображается нормально, а старые записи в cp1251.
Может кто подскажет, как можно конвертировать старые записи из cp1251 в utf-8?
Удалось выяснить, что при конвертировании иероглифов в windows-1252 текст становится нормальным, но некоторые символы остаются квадратиками.
В MySQL пробовал SELECT CONVERT(text USING latin1) FROM table LIMIT 10, так и не смог вывести текст в читаемом виде. Не понимаю, во что его нужно сконвертить средствами MySQL.
Мде, ну видимо в 3 этапа:
1 — выгрузить данные до определённого момента, например по дате. Можно тем же mysqldump, а потом отрезать часть файла таблицы;
2 — переконвертировать в utf-8, тем же iconv;
3 — проапдейтить таблицу. Либо по записи через SQL UPDATE, либо слить обратно в файл таблицы и его целиком загнать в базу. 2-ой вариант возможен только если эта таблица постоянно не меняется, т.е. можно её на минутку заморозить.
В принципе, самое просто решение наверное — сделать CONVERT средствами MySQL, выбрав по дате. Но там есть сложность, что кодировка несколько раз туда-обратно менялась. Можно ли средствами MySQL определить, какая кодировка в заданном поле?
Может через Sypex Dumper попробовать? после экспорта сделать импорт указав кодировку и поставив чекбокс — коррекция кодировки? Не уверен, однако неправильные кодировки я так лечил