Modifique todas as tabelas em um banco de dados com um único comando

13

Existe um comando único ou de uma linha para modificar todas as tabelas em um banco de dados. Eu gostaria de emitir este comando em todas as tabelas dentro de um banco de dados:

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;

Meu objetivo é modificar o conjunto de caracteres de latin1 para utf8 em todas as tabelas.

ATUALIZAÇÃO: RDBMS é MySQL

Mar Cejas
fonte

Respostas:

18

Não, não existe esse comando. Mas o que você pode fazer é escrever uma consulta rápida para gerar o SQL para você da seguinte maneira:

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";

Em seguida, você pode executar a saída disso para fazer o que você precisa.

Fontes:

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

Mr.Brownstone
fonte
Não, não há uma maneira de fazer o que você deseja em um único comando.
Mr.Brownstone
Para que isso funcionasse com o MariaDB, por algum motivo, tive que deixar de WHERE TABLE_SCHEMA = "your_schema_goes_here"fora do comando.
Gwyneth Llewelyn
2

Maneira mais fácil: exporte o banco de dados. Abra o banco de dados exportado em um editor de texto e execute um Localizar / Substituir por "UTF8" ou qualquer outra coisa. Reimporte o banco de dados alterado.

Andrew Smith
fonte
1
Por que essa é a maneira mais fácil? E se você não puder derrubar seu banco de dados para modificar o conjunto de caracteres?
Dezso
Porque não requer conhecimento de SQL. Obviamente, se você não puder exportar o banco de dados, a facilidade e esse método seriam irrelevantes. Mas, se você tiver privilégio suficiente para editar o banco de dados diretamente, é altamente provável que também possa exportá-lo.
Andrew Smith
Esta foi a melhor solução no meu caso! correção rápida que veio bastante útil. Eu estava trabalhando no meu local quando comecei a ter um erro "mistura ilegal de agrupamentos" no meu banco de dados por algum motivo. +1.
evl183
1

Se você estiver trabalhando com o MS SQL Server, existe um procedimento armazenado não documentado ms_foreachtable que você pode usar. Use substituir o nome da tabela por um? na declaração.

Então no seu exemplo

EXEC ms_foreachtable 'ALTER TABLE [?] .....'
Kenneth Fisher
fonte
Este artigo fala sobre ter ms_foreachtable no MYSQL MYSQL CLONE OF SP_MSFOREACHTABLE
Maryam Arshi