Modifica tutte le tabelle in un database con un singolo comando


13

Esiste un comando a riga singola o singola per modificare tutte le tabelle all'interno di un database. Vorrei emettere questo comando in ogni tabella all'interno di un database:

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;

Il mio obiettivo è di modificare il set di caratteri da latin1 a utf8 a tutte le tabelle.

AGGIORNAMENTO: RDBMS è MySQL

Risposte:


18

No, non esiste tale comando. Ma quello che puoi fare è scrivere una rapida query per generare l'SQL per te in questo modo:

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

Quindi puoi eseguire l'output da questo per fare ciò di cui hai bisogno.

fonti:

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


No, non esiste un modo per fare ciò che vuoi in un singolo comando.
Mr.Brownstone,

Per far funzionare tutto questo sotto MariaDB, per qualche motivo, ho dovuto abbandonare WHERE TABLE_SCHEMA = "your_schema_goes_here"il comando.
Gwyneth Llewelyn,

2

Il modo più semplice: esportare il database. Aprire il database esportato in un editor di testo ed eseguire un Trova / Sostituisci con "UTF8" o altro. Reimportazione del database modificato.


1
Perché è questo il modo più semplice? Cosa succede se non è possibile disattivare il DB per modificare il set di caratteri?
dezso

Perché non richiede alcuna conoscenza SQL. Ovviamente, se non è possibile esportare il database: facilità e questo metodo sarebbe irrilevante. Tuttavia, se si dispone dei privilegi sufficienti per modificare direttamente il database, è molto probabile che sia possibile esportarlo anche.
Andrew Smith,

Questa è stata la migliore soluzione nel mio caso! soluzione rapida molto utile. Stavo lavorando nel mio locale quando ho iniziato ad avere un errore "mix illegale di regole di confronto" nel mio database per qualche motivo. +1.
evl183,

1

Se si utilizza MS SQL Server, è possibile utilizzare una procedura memorizzata ms_foreachtable non documentata. Usa sostituisci il nome della tabella con un? nella dichiarazione.

Quindi nel tuo esempio

EXEC ms_foreachtable 'ALTER TABLE [?] .....'

Questo articolo parla di avere ms_foreachtable in MYSQL MYSQL CLONE OF SP_MSFOREACHTABLE
Maryam Arshi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.