Les jeux de caractères et les interclassements déterminent la manière dont ApsaraDB RDS for MySQL stocke et compare les données de type chaîne. Les incohérences entre les jeux de caractères aux différents niveaux (serveur, base de données, table et colonne) constituent une source fréquente d'erreurs d'encodage et de problèmes liés à la sensibilité à la casse. Cette rubrique explique les conventions de nommage des interclassements, comment inspecter les paramètres actuels et comment modifier les jeux de caractères à chaque niveau.
Conventions de nommage des interclassements
Le nom d'un interclassement commence par le nom du jeu de caractères associé et se termine par l'un des suffixes suivants :
| Suffixe | Signification |
|---|---|
_ci |
Insensible à la casse |
_cs |
Sensible à la casse |
_bin |
Comparaison binaire basée sur les points de code ; toujours sensible à la casse |
Exemple : Si collation_connection est défini sur utf8_general_ci, les valeurs a et A sont considérées comme égales. Avec utf8_bin, elles ne le sont pas.

Héritage des jeux de caractères
Les jeux de caractères se propagent en cascade à travers les niveaux : serveur > base de données > table > colonne. Une colonne sans jeu de caractères explicite hérite de celui de sa table ; la table hérite de celui de sa base de données ; et la base de données hérite de celui du serveur.
Cela signifie que la modification du jeu de caractères d'une table n'affecte pas les colonnes qui possèdent déjà un jeu de caractères explicite. Ces dernières doivent être mises à jour séparément.
Inspecter les paramètres des jeux de caractères
Utilisez les instructions SQL suivantes pour inspecter les paramètres actuels des jeux de caractères et des interclassements sur votre instance RDS :
-- Inspect current settings
SHOW GLOBAL VARIABLES LIKE '%char%'; -- Character set parameters of the RDS instance
SHOW GLOBAL VARIABLES LIKE 'coll%'; -- Collation parameters of the current session
SHOW CHARACTER SET; -- Character sets supported by the RDS instance
SHOW COLLATION; -- Collations supported by the RDS instance
SHOW CREATE TABLE table_name \G -- Character set of a specific table
SHOW CREATE DATABASE database_name \G -- Character set of a specific database
SHOW CREATE PROCEDURE procedure_name \G -- Character set of a stored procedure
SHOW PROCEDURE STATUS \G -- Character set settings of all stored procedures
SHOW FULL FIELDS FROM table_name; -- Character set of each column in a table
ALTER DATABASE db_name DEFAULT CHARSET utf8; -- Changes the character set of a database
CREATE DATABASE db_name CHARACTER SET utf8; -- Specifies a character set for a database during creation
ALTER TABLE tab_name DEFAULT CHARSET utf8 COLLATE utf8_general_ci; -- Changes the character set and collation of a table

Modifier le paramètre character_set_server
Le paramètre character_set_server définit le jeu de caractères par défaut au niveau du serveur. Sa modification affecte toutes les bases de données créées après la prise d'effet du changement.
La modification de character_set_server nécessite le redémarrage de l'instance RDS. Planifiez cette opération pendant les heures creuses.
Connectez-vous à la console ApsaraDB RDS.
-
Dans la barre de navigation supérieure, sélectionnez la région où réside l'instance RDS.

Localisez l'instance RDS et cliquez sur son ID.
Dans le volet de navigation de gauche, cliquez sur Parameters.
Sous l'onglet Editable Parameters, recherchez
character_set_serveret cliquez sur l'icône
dans la colonne Running Parameter Value. Saisissez la nouvelle valeur dans la boîte de dialogue et cliquez sur OK.Cliquez sur Apply Changes. Dans la boîte de dialogue, cliquez sur OK et attendez le redémarrage de l'instance RDS.
Cette modification ne prend effet que pour les bases de données créées après la création d'un compte privilégié pour l'instance RDS.
Modifier les jeux de caractères via SQL
Syntaxe
Pour modifier le jeu de caractères au niveau de la base de données, de la table ou de la colonne, utilisez les instructions suivantes :
-- Change the character set of a database
ALTER DATABASE <database_name> CHARACTER SET <charset_name> COLLATE <collation_name>;
-- Change the character set of a table (converts all columns that have no explicit character set)
ALTER TABLE <table_name> CONVERT TO CHARACTER SET <charset_name> COLLATE <collation_name>;
-- Change the character set of a specific column
ALTER TABLE <table_name> MODIFY <column_name> <data_type> CHARACTER SET <charset_name> COLLATE <collation_name>;
Exemple
Modifiez le jeu de caractères de la base de données dbsdq, de la table tt2 et de la colonne c2 pour utiliser utf8mb4 :
ALTER DATABASE dbsdq CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE dbsdq;
ALTER TABLE tt2 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tt2 MODIFY c2 VARCHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Remarques d'utilisation
Les modifications de colonne s'appliquent immédiatement à toutes les lignes. Lorsque vous modifiez le jeu de caractères d'une colonne, le nouveau jeu de caractères prend effet sur chaque ligne existante de cette colonne.
ALTER TABLEacquiert un verrou de métadonnées (MDL). Le verrou est maintenu pendant toute la durée de l'opération, ce qui bloque les écritures concurrentes sur la table.Spécifiez les jeux de caractères au bon niveau. Vous pouvez spécifier des jeux de caractères pour les serveurs, les bases de données, les tables et les champs. Les jeux de caractères au niveau du serveur, de la base de données et de la table utilisent les paramètres par défaut. Si vous souhaitez spécifier un jeu de caractères pour un objet, vous devez modifier séparément le jeu de caractères de cet objet ; sinon, le jeu de caractères au niveau du serveur est utilisé par défaut.
La modification du jeu de caractères d'une base de données ne met pas à jour les tables ou les colonnes existantes. Modifiez chaque objet séparément. Utilisez
SHOW CREATE TABLE table_name;ouSHOW FULL FIELDS FROM table_name;pour vérifier le jeu de caractères actuel de chaque colonne avant et après la modification.