Tuesday, January 18, 2011

Как поменять кодировку всех таблиц в MySQL

Иногда бывает так, что из доступа к базе данных бувает только доступ через 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

Read more: Генеральский чай