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

13

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

Mar Cejas
la source

Réponses:

18

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

Mr.Brownstone
la source
Non, il n'y a pas moyen de faire ce que vous voulez en une seule commande.
Mr.Brownstone
Pour que cela fonctionne sous MariaDB, pour une raison quelconque, j'ai dû laisser le WHERE TABLE_SCHEMA = "your_schema_goes_here"hors de la commande.
Gwyneth Llewelyn
2

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.

Andrew Smith
la source
1
Pourquoi est-ce le moyen le plus simple? Et si vous ne pouvez pas faire tomber votre base de données pour modifier le jeu de caractères?
dezso
Parce qu'il ne nécessite aucune connaissance SQL. Évidemment, si vous ne pouvez pas exporter la base de données: facilité et cette méthode ne serait pas pertinente. Mais, si vous disposez des privilèges suffisants pour modifier directement la base de données, il est fort probable que vous puissiez également l'exporter.
Andrew Smith
C'était la meilleure solution dans mon cas! solution rapide qui est assez pratique. Je travaillais dans ma section locale lorsque j'ai commencé à avoir une erreur "mélange illégal de classements" dans ma base de données pour une raison quelconque. +1.
evl183
1

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 [?] .....'
Kenneth Fisher
la source
Cet article parle d'avoir ms_foreachtable dans MYSQL MYSQL CLONE OF SP_MSFOREACHTABLE
Maryam Arshi