web-dev-qa-db-fra.com

Modifier toutes les tables d'une base de données avec une seule commande

Existe-t-il une commande unique ou une ligne pour modifier toutes les tables d'une base de données. Je voudrais émettre cette commande dans chaque table d'une base de données:

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;

Mon objectif est de modifier le jeu de caractères de latin1 à utf8 pour toutes les tables.

MISE À JOUR: RDBMS est MySQL

13
Mar Cejas

Non, il n'y a pas une telle commande. Mais ce que vous pouvez faire est d'écrire une requête rapide pour générer le SQL pour vous comme ceci:

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

Ensuite, vous pouvez exécuter la sortie à partir de cela pour faire ce dont vous avez besoin.

Sources:

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

18
Mr.Brownstone

Le moyen le plus simple: exporter la base de données. Ouvrez la base de données exportée dans un éditeur de texte et effectuez une recherche/remplacement par "UTF8" ou autre. Réimportez la base de données modifiée.

2
Andrew Smith

Si vous travaillez avec MS SQL Server, il existe une procédure stockée non documentée ms_foreachtable que vous pouvez utiliser. Utilisez remplacer le nom de la table par un? dans la déclaration.

Donc, dans votre exemple

EXEC ms_foreachtable 'ALTER TABLE [?] .....'
1
Kenneth Fisher