J'ai besoin d'exécuter ces instructions dans toutes les tables pour toutes les colonnes.
alter table table_name charset=utf8;
alter table table_name alter column column_name charset=utf8;
Est-il possible d'automatiser cela de quelque manière que ce soit dans MySQL? Je préfère éviter mysqldump
Mise à jour: Richard Bronosky m'a montré le chemin :-)
La requête que j'avais besoin d'exécuter dans chaque table:
alter table DBname.DBfield CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Requête folle pour générer toutes les autres requêtes:
SELECT distinct CONCAT( 'alter table ', TABLE_SCHEMA, '.', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'DBname';
Je voulais seulement l'exécuter dans une seule base de données. Cela prenait trop de temps pour exécuter tout en un seul passage. Il s'est avéré qu'il générait une requête par champ et par table. Et une seule requête par table était nécessaire (distincte à la rescousse). Obtenir la sortie sur un fichier est la façon dont je l'ai réalisé.
Comment générer la sortie dans un fichier:
mysql -B -N --user=user --password=secret -e "SELECT distinct CONCAT( 'alter table ', TABLE_SCHEMA, '.', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'DBname';" > alter.sql
Et enfin pour exécuter toutes les requêtes:
mysql --user=user --password=secret < alter.sql
Merci Richard. Tu es l'homme!
la source
En fait, vous pouvez utiliser CONVERT TO sur une table pour qu'elle convertisse toutes les colonnes de cette table en charset et en classement.
En outre, il est plus logique pour moi de sélectionner la base de données réelle sur laquelle vous souhaitez effectuer cette opération. Donc ça:
plutôt que ça:
Mais je suppose que si vous vouliez vraiment le faire sur toutes les tables, vous pourriez utiliser le premier. Cela me semble cependant un peu lourd. :)
la source
Pour modifier le classement sur toutes les colonnes que j'ai utilisées
la source
Vous pouvez utiliser la
information_schema
base de données pour trouver la colonne et la table que vous devez modifier. Vous pouvez les trouver avec:Ensuite, vous pouvez automatiser la modification avec un script SQL, une procédure de stockage ou avec votre langage de développement préféré.
la source