Modificar todas las tablas en una base de datos con un solo comando

13

¿Existe un comando único o de una línea para modificar todas las tablas dentro de una base de datos? Me gustaría emitir este comando en cada tabla dentro de una base de datos:

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;

Mi objetivo es modificar el juego de caracteres de latin1 a utf8 en todas las tablas.

ACTUALIZACIÓN: RDBMS es MySQL

Mar Cejas
fuente

Respuestas:

18

No, no hay tal comando. Pero lo que puede hacer es escribir una consulta rápida para generar el SQL para usted, así:

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

Luego puede ejecutar el resultado de esto para hacer lo que necesita.

Fuentes:

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

Mr.Brownstone
fuente
No, no hay una manera de hacer lo que quieres en un solo comando.
Mr.Brownstone
Para que esto funcione bajo MariaDB, por alguna razón, tuve que dejar WHERE TABLE_SCHEMA = "your_schema_goes_here"el comando.
Gwyneth Llewelyn
2

La forma más fácil: exportar la base de datos. Abra la base de datos exportada en un editor de texto y realice una búsqueda / reemplazo con "UTF8" o lo que sea. Reimportar la base de datos modificada.

Andrew Smith
fuente
1
¿Por qué es esta la forma más fácil? ¿Qué pasa si no puede derribar su DB para modificar el conjunto de caracteres?
dezso
Porque no requiere conocimiento de SQL. Obviamente, si no puede exportar la base de datos: la facilidad y este método sería irrelevante. Pero, si tiene el privilegio suficiente para editar la base de datos directamente, es muy probable que también pueda exportarla.
Andrew Smith
¡Esta fue la mejor solución en mi caso! Solución rápida que fue bastante útil. Estaba trabajando en mi local cuando empecé a tener un error de "mezcla ilegal de colaciones" en mi base de datos por alguna razón. +1.
evl183
1

Si está trabajando con MS SQL Server, hay un procedimiento almacenado no documentado ms_foreachtable que puede usar. Utilice reemplazar el nombre de la tabla con un? en el comunicado

Entonces en tu ejemplo

EXEC ms_foreachtable 'ALTER TABLE [?] .....'
Kenneth Fisher
fuente
Este artículo habla sobre tener ms_foreachtable en MYSQL MYSQL CLONE OF SP_MSFOREACHTABLE
Maryam Arshi