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

Modification de l'encodage des caractères MySQL. L'intégrité des données est-elle préservée ?

Chaque colonne (de type chaîne de caractères) a son propre jeu de caractères et métadonnées de classement.

Si, lorsque la colonne le type de données de a été spécifié (c'est-à-dire quand il a été créé ou modifié pour la dernière fois), aucun jeu de caractères/collation n'a été explicitement donné, alors le jeu de caractères et le classement par défaut de la table seraient utilisés pour la colonne.

Si, lorsque la table a été spécifié, aucun jeu de caractères/classement par défaut n'a été explicitement donné, alors le jeu de caractères et le classement par défaut de la base de données seraient utilisés pour la valeur par défaut de la table.

Les commandes que vous citez dans votre question modifient simplement ces jeux de caractères/collations par défaut pour la base de données et la table respectivement. En d'autres termes, ils n'affecteront que les tables et les colonnes créées par la suite, ils n'affecteront pas affecter les colonnes (ou données) existantes.

Pour mettre à jour les données existantes, vous devez d'abord lire le Modifier le jeu de caractères section de la page de manuel sur ALTER TABLE :

Pour changer uniquement la valeur par défaut jeu de caractères pour une table, utilisez cette instruction :

ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;

Le mot DEFAULT est facultatif. Le jeu de caractères par défaut est le jeu de caractères utilisé si vous ne spécifiez pas le jeu de caractères pour les colonnes que vous ajoutez ultérieurement à une table (par exemple, avec ALTER TABLE ... ADD column ).

Lorsque foreign_key_checks Si la variable système est activée, ce qui est le paramètre par défaut, la conversion du jeu de caractères n'est pas autorisée sur les tables qui incluent une colonne de chaîne de caractères utilisée dans une contrainte de clé étrangère. La solution consiste à désactiver foreign_key_checks avant d'effectuer la conversion du jeu de caractères. Vous devez effectuer la conversion sur les deux tables impliquées dans la contrainte de clé étrangère avant de réactiver foreign_key_checks . Si vous réactivez foreign_key_checks après avoir converti une seule des tables, un ON DELETE CASCADE ou ON UPDATE CASCADE opération pourrait corrompre les données dans la table de référence en raison de la conversion implicite qui se produit au cours de ces opérations (bogue #45290, bogue #74816).