Si les colonnes utilisent le jeu de caractères de table par défaut, il n'y a qu'une seule requête par table à convertir :
ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Si le jeu de caractères est défini individuellement sur chaque colonne, autant que je sache, il n'y a aucun moyen de le faire sur toutes les colonnes de toutes les tables de la base de données directement dans MySql, mais vous pouvez écrire un petit programme dans la langue de votre choix qui le fait.
Votre programme interrogerait le INFORMATION_SCHEMA.COLUMNS
table et regardez le CHARACTER_SET_NAME
colonne :
SELECT * FROM `INFORMATION_SCHEMA.COLUMNS`
WHERE TABLE_SCHEMA = 'dbname' AND CHARACTER_SET_NAME = 'latin1'
Pour chaque ligne de résultat, il est trivial de synthétiser et d'exécuter un ALTER TABLE
requête sur place qui modifie le jeu de caractères et le classement de manière appropriée :
ALTER TABLE t MODIFY col TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Dans la requête ci-dessus t
, col
et TEXT
seraient les valeurs de la TABLE_NAME
, COLUMN_NAME
et DATA_TYPE
colonnes de INFORMATION_SCHEMA.COLUMNS
jeu de résultats.