2 августа 2009, 15:42
MySQL convert All tables (encoding, alter)
Иногда нужно поменять кодировку БД (появился новый язык, и нужен утф8 срочно, или поменялась ЦМС, или власть сменилась).
Хм, у нас для этого есть стандартные команды:
Не смешно :( но выход есть, всё теми же стандартными фишками ;)
ЗЫ: все таблички то в нужной кодировочке, а база то нет ;) не забываем
Хм, у нас для этого есть стандартные команды:
ALTER TABLE sometable CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci; ALTER TABLE sometable DEFAULT CHARACTER SET cp1251; # another way ALTER TABLE articles CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci ALTER TABLE articles DEFAULT CHARACTER SET utf8Казалось бы, всё просто ;) Но а если таблиц 100, 200, 300 о_О это что по одной колбасить? :D
Не смешно :( но выход есть, всё теми же стандартными фишками ;)
# мы возьмём и используем ИнфоСхему ;) use information_schema; # Запихаем все таблички базы someDB в МЕМ select TABLE_SCHEMA, TABLE_NAME from TABLES where TABLE_SCHEMA = "someDB"; # Нарисуем команды select CONCAT("Alter Table `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci; Alter Table `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` DEFAULT CHARACTER SET cp1251;") as MySQLCMD from TABLES where TABLE_SCHEMA = "someDB"; # Думаете всё? Магия произошла? нееет! # Теперь смотрим в аутпут, копируем все команды, # и выполняем огромный запрос. # Для удобства советую phpMyAdmin
ЗЫ: все таблички то в нужной кодировочке, а база то нет ;) не забываем
ALTER DATABASE `someDB` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;

1 комментарий РСС
select concat(’alter table ’,table_schema,’.’,table_name,’ engine=MyISAM;’)
from information_schema.tables
where engine = ’InnoDB’
use information_schema; # Запихаем все таблички базы someDB в МЕМ select TABLE_SCHEMA, TABLE_NAME from TABLES where TABLE_SCHEMA = "someDB"; # Нарисуем команды select CONCAT("Alter Table `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; Alter Table `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` DEFAULT CHARACTER SET utf8;") as MySQLCMD from TABLES where TABLE_SCHEMA = "someDB";Ваш комментарий