Dans MariaDB, le classement peut être appliqué à plusieurs niveaux. Le classement 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.
Il est également possible de spécifier un classement au niveau de la requête, afin qu'il remplace tout classement appliqué au niveau de la base de données, de la table ou de la colonne.
MariaDB fournit un certain nombre d'options pour renvoyer le classement aux différents niveaux.
Afficher la connexion, le serveur et le classement de la base de données
Nous pouvons utiliser le SHOW VARIABLES
déclaration administrative avec le LIKE
clause pour renvoyer des variables qui incluent une certaine chaîne dans leurs noms.
Exemple :
SHOW VARIABLES LIKE 'collation%';
Exemple de résultat :
+----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8_general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci | +----------------------+--------------------+
Ce sont les résultats que j'obtiens dans mon environnement de test. Le résultat que vous obtiendrez dépendra de vos paramètres.
Chacune de ces variables distinctes peut être renvoyée séparément si nécessaire (voir ci-dessous).
Par défaut, SHOW VARIABLES
affiche la SESSION
variables. Dans ce cas, il renvoie les valeurs en vigueur pour la connexion en cours.
Par conséquent, l'exemple précédent pourrait être réécrit comme suit :
SHOW SESSION VARIABLES LIKE 'collation%';
Exemple de résultat :
+----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8_general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci | +----------------------+--------------------+
Alternativement, vous pouvez remplacer SESSION
avec LOCAL
(qui est synonyme de SESSION
):
SHOW LOCAL VARIABLES LIKE 'collation%';
Vous pouvez également utiliser le GLOBAL
modificateur pour afficher les valeurs utilisées pour les nouvelles connexions à MariaDB.
Exemple :
SHOW GLOBAL VARIABLES LIKE 'collation%';
Exemple de résultat :
+----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci | +----------------------+--------------------+
Collecte de serveurs
La commande suivante renvoie le classement par défaut du serveur :
SELECT @@collation_server;
Exemple de résultat :
+--------------------+ | @@collation_server | +--------------------+ | utf8mb4_general_ci | +--------------------+
Classement au niveau de la connexion
Lorsque vous exécutez une requête sur une base de données MariaDB, MariaDB 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 du serveur, MariaDB 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, MariaDB peut traduire ces résultats dans un jeu de caractères différent si nécessaire. MariaDB 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 | +------------------------+ | utf8_general_ci | +------------------------+
Vous pouvez également renvoyer toutes les variables système du jeu de caractères avec la requête suivante :
SHOW VARIABLES LIKE 'character_set%';
Résultat :
+--------------------------+--------------------------------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/local/Cellar/mariadb/10.5.9/share/mysql/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 :
USE PetHouse;
SELECT @@character_set_database, @@collation_database;
Exemple de résultat :
+--------------------------+----------------------+ | @@character_set_database | @@collation_database | +--------------------------+----------------------+ | utf8mb4 | utf8mb4_general_ci | +--------------------------+----------------------+
Une autre façon de procéder consiste à utiliser une déclaration comme celle-ci :
SELECT
default_character_set_name,
default_collation_name
FROM information_schema.schemata
WHERE schema_name = 'PetHouse';
Exemple de résultat :
+----------------------------+------------------------+ | default_character_set_name | default_collation_name | +----------------------------+------------------------+ | utf8mb4 | utf8mb4_general_ci | +----------------------------+------------------------+
L'utilisation de cette deuxième méthode vous permet d'obtenir les résultats sans changer de base de données.
Ici, il utilise une base de données différente :
SELECT
default_character_set_name,
default_collation_name
FROM information_schema.schemata
WHERE schema_name = 'test';
Exemple de résultat :
+----------------------------+------------------------+ | default_character_set_name | default_collation_name | +----------------------------+------------------------+ | latin1 | latin1_swedish_ci | +----------------------------+------------------------+
Il s'agit de la base de données de test créée lors de la première installation de MariaDB.
Classement au niveau de la table
L'instruction suivante renvoie un certain nombre 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.
SHOW TABLE STATUS LIKE '%Pets%';
Exemple de résultat (en utilisant la sortie verticale) :
*************************** 1. row *************************** Name: Pets Engine: InnoDB Version: 10 Row_format: Dynamic Rows: 8 Avg_row_length: 2048 Data_length: 16384 Max_data_length: 0 Index_length: 32768 Data_free: 0 Auto_increment: NULL Create_time: 2021-03-30 09:10:38 Update_time: 2021-03-30 09:16:39 Check_time: NULL Collation: utf8mb4_general_ci Checksum: NULL Create_options: Comment: Max_index_length: 0 Temporary: N
Dans ce cas, j'ai obtenu des informations sur une table appelée Pets
. Nous pouvons voir que le Collation
la colonne contient utf8mb4_general_ci
, qui est le classement de la table.
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é.
Une autre façon d'obtenir des informations de classement sur vos tables consiste à exécuter une requête sur information_schema.tables
:
SELECT
table_schema,
table_name,
table_collation
FROM information_schema.tables
WHERE table_schema = 'PetHouse';
Exemple de résultat :
+--------------+---------------+--------------------+ | table_schema | table_name | table_collation | +--------------+---------------+--------------------+ | pethouse | vpettypecount | NULL | | pethouse | Pets | utf8mb4_general_ci | | pethouse | Owners | utf8mb4_general_ci | | pethouse | PetTypes | utf8mb4_general_ci | +--------------+---------------+--------------------+
Classement au niveau de la colonne
L'exécution de la requête suivante renvoie des informations sur chaque colonne du Pets
table. Cela inclut les informations de classement.
SHOW FULL COLUMNS FROM Pets;
Exemple de résultat :
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+ | PetId | int(11) | NULL | NO | PRI | NULL | | select,insert,update,references | | | PetTypeId | int(11) | NULL | NO | MUL | NULL | | select,insert,update,references | | | OwnerId | int(11) | NULL | NO | MUL | NULL | | select,insert,update,references | | | PetName | varchar(60) | utf8mb4_general_ci | NO | | NULL | | select,insert,update,references | | | DOB | date | NULL | YES | | NULL | | select,insert,update,references | | +-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
Alternativement, nous pouvons interroger information_schema.columns
. Dans ce cas, nous pouvons choisir uniquement les colonnes qui nous intéressent :
SELECT
column_name,
character_set_name,
collation_name
FROM information_schema.columns
WHERE table_name = 'Pets';
Exemple de résultat :
+-------------+--------------------+--------------------+ | column_name | character_set_name | collation_name | +-------------+--------------------+--------------------+ | PetId | NULL | NULL | | PetTypeId | NULL | NULL | | OwnerId | NULL | NULL | | PetName | utf8mb4 | utf8mb4_general_ci | | DOB | NULL | NULL | +-------------+--------------------+--------------------+
Et une autre option que nous avons dans notre boîte à outils est de vérifier le CREATE TABLE
relevé de notre table.
Comme ceci :
SHOW CREATE TABLE Pets;
Résultat :
+-------+------------------------------+ | Table | Create Table | +-------+------------------------------+ | Pets | CREATE TABLE `Pets` ( `PetId` int(11) NOT NULL, `PetTypeId` int(11) NOT NULL, `OwnerId` int(11) NOT NULL, `PetName` varchar(60) NOT NULL, `DOB` date DEFAULT NULL, PRIMARY KEY (`PetId`), KEY `PetTypeId` (`PetTypeId`), KEY `OwnerId` (`OwnerId`), CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`), CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 | +-------+-------------------------------+
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, les informations de classement n'ont pas diffèrent, et donc aucune information de classement n'a été renvoyée.
Changeons le classement :
ALTER TABLE Pets
MODIFY PetName VARCHAR(255)
CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL;
Et exécutez SHOW CREATE TABLE
encore :
SHOW CREATE TABLE Pets;
Résultat :
+-------+------------------------------+ | Table | Create Table | +-------+------------------------------+ | Pets | CREATE TABLE `Pets` ( `PetId` int(11) NOT NULL, `PetTypeId` int(11) NOT NULL, `OwnerId` int(11) NOT NULL, `PetName` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL, `DOB` date DEFAULT NULL, PRIMARY KEY (`PetId`), KEY `PetTypeId` (`PetTypeId`), KEY `OwnerId` (`OwnerId`), CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`), CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 | +-------+-------------------------------+
Cette fois, nous pouvons voir le nouveau jeu de caractères et les paramètres de classement par rapport au PetName
colonne.