Исправление latin1 в cp1251
Столкнулся с интересной задачкой, в одном из старых проектов база данных оказалась в latin1 при этом соединение с базой данных также устанавливается в latin1. При этом сама база данных содержит русские буквы. Сам проект работает отлично - два бага друг друга компенсируют, но при попытке изменить коллейшн в phpMyAdmin на правильный русские буквы превращаются в вопросики...
Алгоритм решения получился следующий, получаем дамп базы данных в кодировке cp1251, для этого phpMyAdmin нужно заставить думать что он работает в latin1 и в этом режиме сделать дамп нашей базы данных. Для этогого в /libraries/select_lang.lib.php (у меня древний phpMyAdmin в новых может и не то нужно делать...) поменял
'utf-8' => 'utf8',
на
'utf-8' => 'latin1',
phpMyAdmin на главной странице показывает:
MySQL charset: cp1252 West European (latin1)
значит обман удался :)
После этого делаем дамп базы данных называем его например db_cp1251.sql
Открываем дамп и удаляем все где говориться про latin1 (типа DEFAULT CHARSET=latin1)
Забрасываем дамп обратно, но mysql клиенту говорим что файл в кодировке cp1251:
mysql --default-character-set=cp1251 --character-sets-dir="C:\Program Files\MySQL\MySQL Server 4.1\share\charsets" db < db_cp1251.sql
(--character-sets-dir нужен только в Windows)
Не забываем вернуть phpMyAdmin в исходное состояние и, вуаля, файл в правильной кодировке. Ура!.
разрешены только теги br, font, span, p, strong, u, p, blockquote, a, div, img - остальные будут безжалостно удаляться
комментарии: