Zmodyfikuj wszystkie tabele w bazie danych za pomocą jednego polecenia

13

Czy istnieje jedno- lub jedno wierszowe polecenie do modyfikacji wszystkich tabel w bazie danych. Chciałbym wydać to polecenie w każdej tabeli w bazie danych:

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;

Moim celem jest zmodyfikowanie zestawu znaków z latin1 na utf8 do wszystkich tabel.

AKTUALIZACJA: RDBMS to MySQL

Mar Cejas
źródło

Odpowiedzi:

18

Nie, nie ma takiego polecenia. Ale możesz napisać szybkie zapytanie, aby wygenerować odpowiedni dla siebie kod SQL:

USE INFORMATION_SCHEMA;
SELECT 
CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` CONVERT TO CHARACTER SET UTF8;") 
AS MySQLCMD FROM TABLES 
WHERE TABLE_SCHEMA = "your_schema_goes_here";

Następnie możesz uruchomić dane wyjściowe z tego, aby zrobić to, czego potrzebujesz.

Źródła:

http://forums.mysql.com/read.php?20,244395,244421#msg-244421

Mr.Brownstone
źródło
Nie, nie ma sposobu na zrobienie tego, co chcesz za pomocą jednego polecenia.
Mr.Brownstone
Aby z tego powodu działało pod MariaDB, musiałem zrezygnować WHERE TABLE_SCHEMA = "your_schema_goes_here"z polecenia.
Gwyneth Llewelyn
2

Najłatwiejszy sposób: wyeksportuj bazę danych. Otwórz wyeksportowaną bazę danych w edytorze tekstu i wykonaj Znajdź / Zamień na „UTF8” lub cokolwiek innego. Ponownie zaimportuj zmienioną bazę danych.

Andrew Smith
źródło
1
Dlaczego to najłatwiejszy sposób? Co jeśli nie możesz obniżyć swojej bazy danych, aby zmodyfikować zestaw znaków?
dezso,
Ponieważ nie wymaga znajomości języka SQL. Oczywiście, jeśli nie możesz wyeksportować bazy danych: łatwość i ta metoda byłaby nieistotna. Ale jeśli masz wystarczające uprawnienia do bezpośredniej edycji bazy danych, istnieje duże prawdopodobieństwo, że możesz ją również wyeksportować.
Andrew Smith,
To było najlepsze rozwiązanie w moim przypadku! szybka naprawa, która okazała się całkiem przydatna. Pracowałem w swoim lokalnym, kiedy z jakiegoś powodu w mojej bazie danych wystąpił błąd „nielegalnego mieszania zestawień”. +1.
evl183,
1

Jeśli pracujesz z MS SQL Server, istnieje nieudokumentowana procedura składowana ms_foreachtable, której możesz użyć. Użyj zastąpić nazwę tabeli na? w oświadczeniu.

Więc w twoim przykładzie

EXEC ms_foreachtable 'ALTER TABLE [?] .....'
Kenneth Fisher
źródło
Ten artykuł mówi o tym, że ms_foreachtable w MYSQL MYSQL CLONE OF SP_MSFOREACHTABLE
Maryam Arshi