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ą!
źródło
W rzeczywistości możesz użyć CONVERT TO w tabeli, aby przekonwertować wszystkie kolumny w tej tabeli na zestaw znaków i zestawienie.
Ponadto sensowniej jest dla mnie wybrać rzeczywistą bazę danych, na której chcesz to zrobić. Więc to:
zamiast tego:
Ale myślę, że jeśli naprawdę chcesz to zrobić na wszystkich stołach, możesz użyć tego pierwszego. Wydaje mi się to jednak trochę ciężkie. :)
źródło
Aby zmienić sortowanie we wszystkich kolumnach, których użyłem
źródło
Możesz użyć
information_schema
bazy danych, aby znaleźć kolumnę i tabelę, które musisz zmienić. Możesz je znaleźć za pomocą:Następnie możesz zautomatyzować zmianę za pomocą skryptu SQL, procedury składowania lub preferowanego języka programowania.
źródło