Дело было так. Когда я взял хост там была latin1, сервер писал в базу с кодировкой цп1251. Потом я "перевел" как мне казалось, в utf8_general_ci. Но в действительности оно только сделала из нормального цп1251, битый цп1251, то есть приписала лишний байт к нему. То есть сейчас символы в базе хранятся так: 1 левый байт - 1 цп1251'шный В общем как обычно поступают в подобных случаях?
меня интересуют способы фикса такой ломанной кодировки. Ведь информация то цела, просто немного обфусцирована
ntldr Вернуть обратно latin1 не пробовали (теми же действиями, которыми превращали в utf8)? Такое кривое преобразование произошло из-за того, что однобайтовая кодировка latin1 соответствует как раз утф в виде "левый байт"+байт latin1. Обратное преобразование должно пройти нормально Не забудьте сохранить текущий дамп ^^
а возможно ли текстовый дамп бд перекодировать скриптом? к примеру по регулярному выражению найти все места `field`= 'wrong_data' и с wrong_data сделать манипуляцию?
не понял мысли, но зато у меня появилась идея. Написать скрипт который будет делать селект, затем иконв и апдейт в новую базу. Попробую так
в общем у меня получилось из mysql выдрать дамп в чистом цп1251 и перевести его в utf-8. проверял браузером)) он все верно отображал в utf-8. Ho при импорте дампа через утилиту mysql - получаются "иероглифы". Втф?
ntldr При создании таблиц из дампа - указана неправильная кодировка. Code: CREATE TABLE `dedyki` ( тратата описание таблицы ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
дело в том что при создании из дампа у меня уже стоял utf8. Мб играет роль некое "Сопоставление соединения с MySQL:" которое равно utf8_unicode_ci заместо utf8_general_ci?
через mysql administrator? там квадратики вместо данных? это только отображается так криво, импорт пройдёт нормально, уже не раз сталкивался.
нет через консольный mysql. Просто у меня тестовая база с которой я сразу начал нормально работать, там русские буквы идеально отображаются
Получилось. 1)Посмотрев в 16-ричном виде я узнал что MySQL отдает результаты в обычном цп1251 2)Сдампил бд: mysqldump -u root -ppassword --default-character-set=latin1 --skip-set-charset baza > dump.sql 3)Перевел из цп1251 в утф8 iconv -f CP1251 -t UTF-8 -o test1.sql dump.sql 4)Залил обратно в бд дамп в утф8 mysql --default-character-set=utf8 -u root -ppassword -D baza < test1.sql 5)PROFIT