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

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


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.


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

Este artículo habla sobre tener ms_foreachtable en MYSQL MYSQL CLONE OF SP_MSFOREACHTABLE
— Maryam Arshi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.