Иногда бывает так, что из доступа к базе данных бывает только доступ через phpMyAdmin. А также бывает, что кто-то, создал базу с неправильной кодировкой. В моем случае этой кодировкой была — шведская. Что же делать для того чтобы поменять кодировку на более нужную — к примеру utf8?
Для этого существует очень простой способ. Необходимо выполнить вот такой вот запрос при помощи редактора SQL в phpMyAdmin:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
Все бы было ничего, если бы табличек было немного, или хотя бы полей. Но вот беда, табличек может быть и 30 и 40, а лично я очень ленивый, чтобы перебирать их все ручками, да к тому же надо не забыть поменять кодировку также в каждом текстовом поле. Пришлось немножко пошаманить, и вуаля, результат не заставил себя долго ждать.
Итак, MySQL сервер версии 5.0 и выше, умеет выполнить вот такой вот запрос:
SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') as sqlcode
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = 'db_name'
ORDER BY 1
в этом запросе, вместо db_name необходимо поменять на реальное имя базы данных, кодировку которой вы собираетесь менять.
Выполнив этот запрос, мы получим еще один SQL, модифицирующий кодировку таблиц, он будет выглядеть примерно так:
ALTER TABLE `mydatabase`.`auth_group_permissions` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`auth_group` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`auth_message` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`auth_permission` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`auth_user_groups` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`auth_user_user_permissions` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`auth_user` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`blog_post` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`django_admin_log` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`django_comments` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`django_comment_flags` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`django_content_type` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`django_session` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`gallery_album` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`gallery_photo` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`gallery_video` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `mydatabase`.`members_userprofile` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Вот теперь можно копировать результирующий скрипт и выполнять его в окошке SQL зпросов. Результатом выполнения данного скрипта будет изменение кодировки во всех таблицах MySQL базы данных.
Вот так можно сэкономить кучу времени отдав выполнение кучи грязной работы всякого рода автоматизации

Спасибо! Очень помогло!!!!
Приятно слышать, что мой труд не пропадает напрасно, и приносит помощь.
Гениально, спасибо.
Ковырялся с русификацией ZenCart, а там все таблицы (93 штуки) оказались с уже выставленной кодировкой. Скрипт отработал легко и звонко.
Спасибо, действительно помогло!
Бился с базой битрикса, после обновления которого, сравнение таблиц (а их 360!!!) поменялось с utf8_general_ci на utf8_unicode_ci.
ЗЫ: думал блог мертвый, ан нет! — можно поблагодарить!
Спасибо =)
Спасибо большое, очень помог
Громадное спасибо! Избавил от переустановки
Спасибо, дружище, очень помог.
Великолепно и гениально! Очень помогло справиться с непокорным битриксом)
Пожалуйста, пользуйтесь на здоровье, сам этим скриптом часто пользуюсь, и мне самому очень помогает
да, действительно спасибо!
Раньше всегда менял кодировку, ну при необходимости, фактически вручную.
Сохранял базу, далее поиск->замена и сохранение в UTF-8
век живи век учись...
! Спасибо
Замечательно, работает))))))
Спасибо, много пересмотрел и перепробовал, но сработало только это!!))))))))))))))
Я извиняюсь, но чё то у меня ниразу не работает =( у меня есть таблица изначально хранившаяся в БД с кодировкой latin1, теперь я хочу её перенести на другой сервер и перекодировать в utf8. создал копию таблицы с помощью mysqldump и перенёс на другой сервер. но никак оно не хочет становиться utf8... как отображались кракозябры, так и отображаются... если сделать set names latin1 то выборка происходит нормально т.е. получается что база остаась в кодировке latin1
дак ведь после переноса на новый сервер, нужно прогнать скрипт, приведенный выше в посте.
ну я про него и писал, что у меня он не работает. у меня таблица всего одна, так что я руками прописываю ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci и результата никакого он не даёт. всё остаётся как и раньше в latin1
кстати я смотрю что в /usr/share/mysql/charsets нету никакого файла utf8.xml ... может мой мускул в принципе не способен работать с этой кодировкой ?
не исключено, надо поглядеть в настройки самой системы, может и нету поддержки utf8
Спасибо!
Я так свой блог спасла, бывают же добрые люди типо вас...
А у меня создалась после первого запроса база данных information_schema (28), с которой я и не знаю, что делать? К тому же удалить её тоже не знаю как... ;- (
Спасибо!!!!!!!!!!!!!!!!!!!! этим легко решилась проблема виртуалмарта , когда из-за кодировки шведиш все характеристика товара были со знаками вопроса... во всем интернете предлагали фиг знает какие решения, только не эффективные. вы молодец
Спасибо! Работает!
Грешным делом подумал, что все комменты обыкновенная бот-поддержка блога, но терять было нечего и попробовал
Работает!
Спасибо! Реально работает!
У меня в БД 256 таблиц! Замучилась вручную менять, решила погуглить и нашла множество советов, но этот оказался реально рабочим! Радости нет предела!
Дмитрий, базу данных information_schema оставьте в покое!
Дмитрий, Ирина права, оставьте базу information_schema в покое — это системная база MySQL. Если вы будуте ее ломать, то полетит весь сервер.
Всегда рад, что мои советы помогают люям в решении их проблем.