Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment changer le classement de toutes les lignes de latin1_swedish_ci à utf8_unicode_ci ?

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.