Dans MySQL, le classement peut être appliqué à plusieurs niveaux. Il peut être appliqué au niveau du serveur, au niveau de la connexion, au niveau de la base de données, au niveau de la table et même au niveau de la colonne. Vous pouvez également spécifier un classement dans vos requêtes qui remplacera tout classement appliqué au niveau de la base de données, de la table ou de la colonne.
Voici comment savoir quel classement est appliqué à chacun de ces niveaux.
Raccourci pour la connexion, le serveur et le classement de la base de données
Le moyen le plus rapide d'obtenir des informations de classement pour la connexion, le serveur et la base de données consiste à utiliser l'instruction suivante. Cette instruction renvoie toutes les variables système commençant par collation
:
AFFICHER LES VARIABLES COMME 'collation%' ;
Cela renvoie le classement pour le serveur, la connexion et la base de données. Comme ceci :
+----------------------+--------------------+| nom_variable | Valeur |+---------------------+--------------------+| collation_connection | utf8mb4_0900_ai_ci || collation_database | utf8_general_ci || serveur_classement | utf8mb4_0900_ai_ci |+---------------------+--------------------+
Vous pouvez également renvoyer chacune de ces variables système séparément si nécessaire. Voir ci-dessous pour savoir comment procéder.
Classement au niveau du serveur
L'exécution de la commande suivante renvoie le classement par défaut du serveur.
SELECT @@collation_server ;
Exemple de résultat :
+--------------------+| @@collation_server |+--------------------+| utf8mb4_0900_ai_ci |+--------------------+
Classement au niveau de la connexion
Lorsque vous exécutez une requête sur une base de données MySQL, MySQL utilise un ensemble de variables système pour déterminer le jeu de caractères et le classement à utiliser chaque fois que les requêtes sont exécutées. Si le client utilise un jeu de caractères différent de celui du serveur, MySQL peut le traduire en un jeu de caractères et un classement appropriés.
Lors du renvoi des résultats de la requête au client, MySQL peut traduire ces résultats dans un jeu de caractères différent si nécessaire. MySQL utilise des variables système pour déterminer les jeux de caractères et les classements à utiliser à chacune de ces étapes.
Ce qui suit distingue le classement de connexion (vous pouvez utiliser la même syntaxe pour n'importe laquelle des variables système) :
SELECT @@collation_connection ;
Exemple de résultat :
+------------------------+| @@collation_connection |+------------------------+| utf8mb4_0900_ai_ci |+------------------------+
Vous pouvez également renvoyer toutes les variables système du jeu de caractères avec la requête suivante :
AFFICHER LES VARIABLES COMME 'character_set%' ;
Exemple de résultat :
+--------------------------+---------------------------- ---------------+| nom_variable | Valeur |+---------------------------+-------------------- --------------+| jeu_de_caractères_client | utf8mb4 || connexion_jeu_de_caractères | utf8mb4 || jeu_de_caractères_base_de_données | utf8 || jeu_de_caractères_filesystem | binaire || jeu_de_caractères_résultats | utf8mb4 || jeu_de_caractères_serveur | utf8mb4 || système_jeu_de_caractères | utf8 || rép_jeux_de_caractères | /usr/local/mysql/share/charsets/ |+--------------------------+---------- ------------------------+
Collection au niveau de la base de données
L'instruction suivante peut être utilisée pour vérifier le classement d'une base de données donnée :
UTILISER Musique ;SÉLECTIONNER @@character_set_database, @@collation_database ;
Exemple de résultat :
+--------------------------+---------------------------- ---+| @@character_set_database | @@collation_database |+--------------------------+------------------ ----+| utf8 | utf8_general_ci |+--------------------------+-------------------- --+
Vous pouvez également utiliser l'instruction suivante (qui élimine le besoin de modifier la base de données par défaut) :
SELECT default_character_set_name, default_collation_nameFROM information_schema.schemata WHERE schema_name ='Music' ;
Exemple de résultat :
+----------------------------+----------------- -------+| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |+-----------------------+------------------ ------+| utf8 | utf8_general_ci |+----------------------------+------------------ ------+
Classement au niveau de la table
L'exécution de l'instruction suivante renverra tout un tas de colonnes qui fournissent des informations sur les tables correspondantes. L'une de ces colonnes s'appelle Collation , et il fournit le classement de toutes les tables correspondantes.
AFFICHER L'ÉTAT DU TABLEAU COMME '%Artists%' ;
Bien sûr, vous devrez remplacer %Artists%
avec votre propre nom de table. Et vous pouvez omettre les signes de pourcentage si vous pensez qu'ils ne sont pas nécessaires. Cette instruction accepte également d'autres clauses, telles que FROM
, WHERE
, et IN
, cela vous donne donc quelques options lors de la création de votre relevé.
Un problème avec l'instruction précédente est qu'elle renvoie un grand nombre de colonnes et que vous pourriez être obligé de faire défiler latéralement pour trouver la colonne de classement. Si vous n'êtes intéressé que par les informations de classement, vous pouvez interroger information_schema.tables
. Vous pouvez également renvoyer le classement de toutes les tables d'une base de données donnée si nécessaire. Voici comment procéder :
SELECT table_schema, table_name, table_collation FROM information_schema.tablesWHERE table_schema ='Music';
Exemples de résultats :
+-------------+------------+-----------------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION |+-------------+------------+-----------------+| Musique | Albums | utf8_general_ci || Musique | Artistes | utf8_general_ci || Musique | Genres | utf8_general_ci |+-------------+------------+-----------------+Classement au niveau de la colonne
L'exécution de la requête suivante renvoie des informations sur chaque colonne d'une table donnée. Cela inclut les informations de classement.
AFFICHER LES COLONNES COMPLÈTES DES Artistes ;Cela se traduit par un grand nombre de colonnes renvoyées avec toutes sortes d'informations sur la colonne, y compris le classement.
Vous pouvez réduire le nombre de colonnes renvoyées en procédant comme suit :
SELECT nom_colonne, nom_jeu_de_caractères, nom_classement FROM information_schema.columns WHERE nom_table ='Artistes' ;Exemple de résultat :
+--------------------+--------------------+----------- ------+| COLUMN_NAME | CHARACTER_SET_NAME | COLLATION_NAME |+-------------+--------------------+------------ -----+| Identifiant de l'artiste | NUL | NUL || NomArtiste | utf8 | utf8_espagnol_ci || ActiveDepuis | NUL | NULL |+--------------------+--------------------+-------------------- -----+Vous pouvez également exécuter le
SHOW CREATE TABLE
instruction pour afficher une définition de la table (qui inclut ses colonnes).AFFICHER CRÉER TABLE Artistes ;Cela renvoie quelque chose comme ceci :
+---------+---------------------------------------------+| Tableau | Créer un tableau |+---------+---------------------------------------------+| Artistes | CREATE TABLE `Artists` ( `ArtistId` int(11) NOT NULL AUTO_INCREMENT, `ArtistName` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL, `ActiveFrom` datetime NOT NULL, PRIMARY KEY (`ArtistId`)) ENGINE=InnoDB AUTO_INCREMENT=17 CHARSET PAR DEFAUT=utf8 |+---------+------------------------------- -+Cependant, les informations sur le jeu de caractères et le classement ne sont renvoyées que si elles diffèrent du classement par défaut de la table. Dans cet exemple, j'ai défini explicitement le
ArtistName
colonne vers un classement différent uniquement à des fins de démonstration (sinon les informations de classement n'auraient pas été renvoyées).