Просмотр полной версии : Пролюбил кодировку MySQL
Дело было так. Когда я взял хост там была latin1, сервер писал в базу с кодировкой цп1251. Потом я "перевел" как мне казалось, в utf8_general_ci. Но в действительности оно только сделала из нормального цп1251, битый цп1251, то есть приписала лишний байт к нему. То есть сейчас символы в базе хранятся так:
1 левый байт - 1 цп1251'шный
В общем как обычно поступают в подобных случаях?
mailbrush
31.01.2010, 00:41
Восстанавливать БД из дампа, если таковой был.
Восстанавливать БД из дампа, если таковой был.
меня интересуют способы фикса такой ломанной кодировки. Ведь информация то цела, просто немного обфусцирована ;)
ntldr Вернуть обратно latin1 не пробовали (теми же действиями, которыми превращали в utf8)? Такое кривое преобразование произошло из-за того, что однобайтовая кодировка latin1 соответствует как раз утф в виде "левый байт"+байт latin1. Обратное преобразование должно пройти нормально
Не забудьте сохранить текущий дамп ^^
ntldr Вернуть обратно latin1 не пробовали (теми же действиями, которыми превращали в utf8)? Такое кривое преобразование произошло из-за того, что однобайтовая кодировка latin1 соответствует как раз утф в виде "левый байт"+байт latin1. Обратное преобразование должно пройти нормально
Не забудьте сохранить текущий дамп ^^
да, в принципе получилось, но только на отдельной таблице. Всю базу не получается перекодировать :(
imajo.ati
02.02.2010, 00:33
да, в принципе получилось, но только на отдельной таблице. Всю базу не получается перекодировать :(
а возможно ли текстовый дамп бд перекодировать скриптом? к примеру по регулярному выражению найти все места `field`= 'wrong_data' и с wrong_data сделать манипуляцию?
а возможно ли текстовый дамп бд перекодировать скриптом? к примеру по регулярному выражению найти все места `field`= 'wrong_data' и с wrong_data сделать манипуляцию?
не понял мысли, но зато у меня появилась идея. Написать скрипт который будет делать селект, затем иконв и апдейт в новую базу. Попробую так
в общем у меня получилось из mysql выдрать дамп в чистом цп1251 и перевести его в utf-8. проверял браузером)) он все верно отображал в utf-8. Ho при импорте дампа через утилиту mysql - получаются "иероглифы". Втф?
ntldr При создании таблиц из дампа - указана неправильная кодировка. CREATE TABLE `dedyki` (
тратата описание таблицы
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ntldr При создании таблиц из дампа - указана неправильная кодировка. CREATE TABLE `dedyki` (
тратата описание таблицы
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
дело в том что при создании из дампа у меня уже стоял utf8.
Мб играет роль некое "Сопоставление соединения с MySQL:" которое равно utf8_unicode_ci заместо utf8_general_ci?
imajo.ati
02.02.2010, 20:38
Ho при импорте дампа через утилиту mysql - получаются "иероглифы". Втф?
через mysql administrator? там квадратики вместо данных? это только отображается так криво, импорт пройдёт нормально, уже не раз сталкивался.
через 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
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot