Мне нужно выполнить эти операторы во всех таблицах для всех столбцов.
alter table table_name charset=utf8;
alter table table_name alter column column_name charset=utf8;
Можно ли каким-либо образом автоматизировать это в MySQL? Я предпочел бы избежать mysqldump
Обновление: Ричард Броноски показал мне путь :-)
Запрос, который мне нужно было выполнить в каждой таблице:
alter table DBname.DBfield CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Сумасшедший запрос для генерации всех остальных запросов:
SELECT distinct CONCAT( 'alter table ', TABLE_SCHEMA, '.', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'DBname';
Я только хотел выполнить это в одной базе данных. Это заняло слишком много времени, чтобы выполнить все за один проход. Оказалось, что он генерирует один запрос на поле на таблицу. И только один запрос на таблицу был необходим (в отличие от спасения). Как я понял это, получил вывод файла.
Как сгенерировать вывод в файл:
mysql -B -N --user=user --password=secret -e "SELECT distinct CONCAT( 'alter table ', TABLE_SCHEMA, '.', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'DBname';" > alter.sql
И, наконец, выполнить все запросы:
mysql --user=user --password=secret < alter.sql
Спасибо, Ричард. Ты мужчина!