Muszę wykonać te instrukcje we wszystkich tabelach dla wszystkich kolumn.
alter table table_name charset=utf8;
alter table table_name alter column column_name charset=utf8;
Czy jest możliwe zautomatyzowanie tego w jakikolwiek sposób w MySQL? Wolałbym unikać mysqldump
Aktualizacja: Richard Bronosky pokazał mi drogę :-)
Zapytanie, które musiałem wykonać w każdej tabeli:
alter table DBname.DBfield CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Szalone zapytanie, aby wygenerować wszystkie pozostałe zapytania:
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';
Chciałem go wykonać tylko w jednej bazie danych. Wykonanie wszystkiego za jednym przejściem trwało zbyt długo. Okazało się, że generuje jedno zapytanie na pole na tabelę. Konieczne było tylko jedno zapytanie na tabelę (w odróżnieniu od akcji ratunkowej). Uzyskiwanie danych wyjściowych z pliku było tym, jak to sobie uświadomiłem.
Jak wygenerować dane wyjściowe do pliku:
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
I na koniec, aby wykonać wszystkie zapytania:
mysql --user=user --password=secret < alter.sql
Dzięki, Richard. Jesteś mężczyzną!