Мені потрібно виконати ці твердження у всіх таблицях для всіх стовпців.
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
Дякую Річард. Ти людина!