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

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


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.


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 [?] .....'

Este artigo fala sobre ter ms_foreachtable no MYSQL MYSQL CLONE OF SP_MSFOREACHTABLE
Maryam Arshi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.