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!