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

Est-ce un moyen sûr de convertir des tables MySQL de latin1 en utf-8 ?

Il y a 3 cas différents à considérer :

Les valeurs sont en effet encodées en Latin1

C'est le cas constant :le jeu de caractères déclaré et l'encodage du contenu correspondent. C'est le seul cas que j'ai couvert dans ma réponse initiale.

Utilisez la commande que vous avez suggéré :

ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin

Notez que le CONVERT TO CHARACTER SET La commande n'apparaissait que dans MySQL 4.1.2, donc toute personne utilisant une base de données installée avant 2005 devait utiliser une astuce d'exportation/importation. C'est pourquoi il y a tant de scripts et de documents hérités sur Internet qui le font à l'ancienne.

Les valeurs sont déjà encodées en utf8

Dans ce cas, vous ne voulez pas que mysql convertisse les données, il vous suffit de modifier les métadonnées de la colonne.

Pour cela, vous devez d'abord changer le type en BLOB, puis en TEXT utf8 pour chaque colonne, afin qu'il n'y ait pas de conversions de valeur :

ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8

C'est la méthode recommandée, et elle est explicitement documentée dans Alter Documentation sur la syntaxe des tableaux .

Les valeurs utilisées dans un encodage différent

L'encodage par défaut était Latin1 pendant plusieurs années sur certaines distributions Linux. Dans ce cas, vous devez utiliser une combinaison des deux techniques :

  • Corrigez les métadonnées de la table en utilisant l'astuce du type BLOB
  • Convertir les valeurs en utilisant CONVERT TO .