2009-07-24

Исправление 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 - остальные будут безжалостно удаляться