Пляски с кодировкой mysql.




Появилась необходимость перенести базу из mysql на другой сервер. Собственно, всё как всегда – mysqldump, туда — обратно, ничего нового.

Но, незамедлительно возникли дополнительные сложности. Как оказалось, моя корявая база содержала таблицы в кодировке cp1251, а данные в самих таблицах были utf8. Как следствие, конечный итог получился примерно таким:

———————————————————

…вернуться к на�?умев�?ей теме про уязвимость в Internet Explorer.

Собственно, искал немного технических подробностей атаки, но публичные таблоиды (news.techworld.com и другие) предпочитаю лить какую-то воду. Примерно, типа этого:

Как известно, злоумы�?ленники в про�?лом месяце атаковали…

———————————————————

Вроде бы, русские буквы присутствуют, и даже смысл слов можно понять, но убогая получается картина!

Особо просветлённые товарищи немедленно советовали сделать set names, или тупо скопировать файлы базы. Братцы, это всё не помогает. Mysql сам выполняет перекодировку почти корректно. Итог заливки дампа – русские символы, без различных иероглифов и в нужной кодировке. (В другой только хуже будет.) Но, техническое несовершенство налицо.

Что делать? Ясное дело – вникать в секреты mysql’ёвой кухни.

Перерыв sql.ru (поиск по волшебному ключевику «кодировка»), ответ всё же нашёлся. Нужно корректно указывать, какие кодировки для чего использовать при дампе и при импорте.

Дословно, рекомендация следующая:

Допустим, мы выяснили, что таблицы были созданы по умолчанию в кодировке latin1, а фактически в них содержатся данные в utf8. В этом случае используем команду:

mysqldump -uUSERNAME -pPASSWORD DB_NAME —allow-keywords —create-options —complete-insert —default-character-set=latin1 —add-drop-table > dump.sql

Распространненая ошибка в таких случаях — когда в —default-character-set указывают фактическую кодировку данных, в данном случае — utf8. В дампе будет мусор. Указывать надо ту, которая установлена в таблицах. В результате MySQL не будет пытаться данные перекодировать, и отдаст их в том виде как они есть.

Заливаем дамп обратно:

mysql -uUSERNAME -pPASSWORD DB_NAME —default-character-set=utf8 < dump.sql


Что в моём случае выглядит как:

mysqldump –p my-superbase  —allow-keywords —create-options —complete-insert —default-character-set=cp1251 —add-drop-table > my-superbase.sql

mysql –p  my-superbase —default-character-set=utf8 < my-superbase.sql

Вууаля, – волшебным образом, всё стало как надо.

Картинка для иллюстрации:

Картинка для иллюстрации

Изменить кодировку таблицы можно так:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;

Popularity: 1%



Этот материал находится на сайте http://compiling.ru
__________________________________________



Похожие посты:


  • How To Install Alfresco Community 2, Prepare database
  • Virtual Hosting With Proftpd And MySQL. Part3, install and create database
  • Sphinx 2, MySQL console
  • SAMP 3, SMF autostart
  • Как я выжил на маленьком vds.



  • Опубликовано 27 Янв 2010 в 17:38. В рубриках: Solutions. Вы можете следить за ответами к этой записи через RSS 2.0. Вы можете оставить отзыв или трекбек со своего сайта.

    Оставьте свой отзыв

    Партнёры:


    forum.vpnssl.ru

    Выбор решений, консультации, примеры.

    Есть вопрос! Оставь свой голос!

    Question:

    Что нужно админу для счастья?

    View Results

    Loading ... Loading ...




    Most Popular Posts



    Supported:



  • free counters