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

Afficher le classement dans MariaDB

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.