sql >> Database teknologi >  >> RDS >> MariaDB

Vis Samlingen i MariaDB

I MariaDB kan sortering anvendes på mange niveauer. Sortering kan anvendes på serverniveau, forbindelsesniveau, databaseniveau, tabelniveau og endda på kolonneniveau.

Det er også muligt at angive en sortering på forespørgselsniveau, så den vil tilsidesætte enhver sortering, der er blevet anvendt på database-, tabel- eller kolonneniveauer.

MariaDB giver en række muligheder for at returnere sorteringen på de forskellige niveauer.

Vis forbindelse, server og databasesortering

Vi kan bruge SHOW VARIABLES administrativ erklæring med LIKE klausul for at returnere variabler, der inkluderer en bestemt streng i deres navne.

Eksempel:

SHOW VARIABLES LIKE 'collation%';

Eksempelresultat:

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8_general_ci    |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

Det er de resultater, jeg får i mit testmiljø. Det resultat, du får, afhænger af dine indstillinger.

Hver af disse separate variabler kan returneres separat, hvis det kræves (se nedenfor).

Som standard er SHOW VARIABLES viser SESSION variabler. I dette tilfælde returnerer den de værdier, der er gældende for den aktuelle forbindelse.

Derfor kunne det foregående eksempel omskrives som følger:

SHOW SESSION VARIABLES LIKE 'collation%';

Eksempelresultat:

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8_general_ci    |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

Alternativt kan du erstatte SESSION med LOCAL (som er et synonym for SESSION ):

SHOW LOCAL VARIABLES LIKE 'collation%';

Du kan også bruge GLOBAL modifikator for at vise de værdier, der bruges til nye forbindelser til MariaDB.

Eksempel:

SHOW GLOBAL VARIABLES LIKE 'collation%';

Eksempelresultat:

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

Serverindsamling

Følgende kommando returnerer serverens standardsortering:

SELECT @@collation_server;

Eksempelresultat:

+--------------------+
| @@collation_server |
+--------------------+
| utf8mb4_general_ci |
+--------------------+

Sortering på forbindelsesniveau

Når du kører en forespørgsel mod en MariaDB-database, bruger MariaDB en masse systemvariabler til at bestemme, hvilket tegnsæt og sortering, der skal bruges, når der køres forespørgsler. Hvis klienten bruger et andet tegnsæt til serveren, kan MariaDB oversætte det til et passende tegnsæt og sortering.

Når forespørgselsresultaterne sendes tilbage til klienten, kan MariaDB om nødvendigt oversætte disse resultater tilbage til et helt andet tegnsæt. MariaDB bruger systemvariable til at bestemme, hvilke tegnsæt og sorteringer der skal bruges ved hvert af disse trin.

Følgende fremhæver forbindelsessorteringen (du kan bruge den samme syntaks for enhver af systemvariablerne):

SELECT @@collation_connection;

Eksempelresultat:

+------------------------+
| @@collation_connection |
+------------------------+
| utf8_general_ci        |
+------------------------+

Du kan også returnere alle tegnsætsystemvariabler med følgende forespørgsel:

SHOW VARIABLES LIKE 'character_set%';

Resultat:

+--------------------------+--------------------------------------------------------+
| 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/ |
+--------------------------+--------------------------------------------------------+

Sortering på databaseniveau

Følgende sætning kan bruges til at kontrollere sammenstillingen af ​​en given database:

USE PetHouse;
SELECT @@character_set_database, @@collation_database;

Eksempelresultat:

+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4                  | utf8mb4_general_ci   |
+--------------------------+----------------------+

En anden måde at gøre det på er at bruge et udsagn som dette:

SELECT 
    default_character_set_name, 
    default_collation_name 
FROM information_schema.schemata 
WHERE schema_name = 'PetHouse';

Eksempelresultat:

+----------------------------+------------------------+
| default_character_set_name | default_collation_name |
+----------------------------+------------------------+
| utf8mb4                    | utf8mb4_general_ci     |
+----------------------------+------------------------+

Ved at bruge denne anden metode kan du få resultaterne uden at skifte database.

Her bruger den en anden database:

SELECT 
    default_character_set_name, 
    default_collation_name 
FROM information_schema.schemata 
WHERE schema_name = 'test';

Eksempelresultat:

+----------------------------+------------------------+
| default_character_set_name | default_collation_name |
+----------------------------+------------------------+
| latin1                     | latin1_swedish_ci      |
+----------------------------+------------------------+

Dette er testdatabasen, der blev oprettet, da jeg først installerede MariaDB.

Sortering på tabelniveau

Følgende udsagn returnerer et antal kolonner, der giver information om en eller flere matchende tabeller. En af disse kolonner kaldes Samling , og det giver sammenstillingen af ​​alle matchende tabeller.

SHOW TABLE STATUS LIKE '%Pets%';

Eksempelresultat (ved brug af lodret output):

*************************** 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

I dette tilfælde fik jeg information om en tabel kaldet Pets . Vi kan se, at Collation kolonne indeholder utf8mb4_general_ci , som er sammenstillingen af ​​tabellen.

Denne erklæring accepterer også andre klausuler, såsom FROM , WHERE og IN , så dette giver dig nogle muligheder, når du bygger din erklæring.

En anden måde at få sorteringsoplysninger om dine tabeller på er at køre en forespørgsel mod information_schema.tables :

SELECT 
    table_schema, 
    table_name, 
    table_collation 
FROM information_schema.tables 
WHERE table_schema = 'PetHouse';

Eksempelresultat:

+--------------+---------------+--------------------+
| table_schema | table_name    | table_collation    |
+--------------+---------------+--------------------+
| pethouse     | vpettypecount | NULL               |
| pethouse     | Pets          | utf8mb4_general_ci |
| pethouse     | Owners        | utf8mb4_general_ci |
| pethouse     | PetTypes      | utf8mb4_general_ci |
+--------------+---------------+--------------------+

Sortering på kolonneniveau

Kørsel af følgende forespørgsel returnerer oplysninger om hver kolonne i Pets bord. Dette inkluderer sorteringsoplysningerne.

SHOW FULL COLUMNS FROM Pets;

Eksempelresultat:

+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| 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 |         |
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+

Alternativt kan vi forespørge information_schema.columns . I dette tilfælde kan vi kun vælge de kolonner, vi er interesserede i:

SELECT 
    column_name, 
    character_set_name, 
    collation_name 
FROM information_schema.columns
WHERE table_name = 'Pets';

Eksempelresultat:

+-------------+--------------------+--------------------+
| column_name | character_set_name | collation_name     |
+-------------+--------------------+--------------------+
| PetId       | NULL               | NULL               |
| PetTypeId   | NULL               | NULL               |
| OwnerId     | NULL               | NULL               |
| PetName     | utf8mb4            | utf8mb4_general_ci |
| DOB         | NULL               | NULL               |
+-------------+--------------------+--------------------+

Og en anden mulighed, vi har i vores værktøjssæt, er at tjekke CREATE TABLE opgørelse af vores tabel.

Sådan:

SHOW CREATE TABLE Pets;

Resultat:

+-------+------------------------------+
| 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 |
+-------+-------------------------------+

Tegnsættet og sorteringsoplysningerne returneres dog kun, hvis de adskiller sig fra tabellens standardsortering. I dette eksempel gjorde sorteringsoplysningerne ikke afvige, og der blev derfor ikke returneret nogen sorteringsoplysninger.

Lad os ændre sammenstillingen:

ALTER TABLE Pets 
MODIFY PetName VARCHAR(255) 
    CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL;

Og kør SHOW CREATE TABLE igen:

SHOW CREATE TABLE Pets;

Resultat:

+-------+------------------------------+
| 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 |
+-------+-------------------------------+

Denne gang kan vi se det nye tegnsæt og sorteringsindstillinger mod PetName kolonne.


  1. Sådan opretter du begrænsning af fremmednøgle med ON UPDATE CASCADE i SQL Server - SQL Server / TSQL Tutorial Del 79

  2. Opdel kolonne i flere rækker i Postgres

  3. Brug af spor kausalitet til at forstå udførelse af forespørgsler

  4. Oracle Forms i R12/R12.2