sql >> Databasteknik >  >> RDS >> MariaDB

Visa sorteringen i MariaDB

I MariaDB kan sortering användas på många nivåer. Sortering kan tillämpas på servernivå, anslutningsnivå, databasnivå, tabellnivå och till och med på kolumnnivå.

Det är också möjligt att ange en sortering på frågenivå, så att den kommer att åsidosätta all sortering som har tillämpats på databas-, tabell- eller kolumnnivåer.

MariaDB tillhandahåller ett antal alternativ för att returnera sorteringen på olika nivåer.

Visa anslutning, server och databassortering

Vi kan använda VISA VARIABLER administrativt uttalande med LIKE sats för att returnera variabler som inkluderar en viss sträng i sina namn.

Exempel:

SHOW VARIABLES LIKE 'collation%';

Exempelresultat:

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

Det här är resultaten som jag får i min testmiljö. Resultatet du får beror på dina inställningar.

Var och en av dessa separata variabler kan returneras separat vid behov (se nedan).

Som standard är VISA VARIABLER visar SESSION variabler. I det här fallet returnerar den de värden som gäller för den aktuella anslutningen.

Därför skulle det föregående exemplet kunna skrivas om enligt följande:

SHOW SESSION VARIABLES LIKE 'collation%';

Exempelresultat:

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

Alternativt kan du ersätta SESSION med LOCAL (som är en synonym för SESSION ):

SHOW LOCAL VARIABLES LIKE 'collation%';

Du kan också använda GLOBAL modifierare för att visa värdena som används för nya anslutningar till MariaDB.

Exempel:

SHOW GLOBAL VARIABLES LIKE 'collation%';

Exempelresultat:

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

Serversamling

Följande kommando returnerar serverns standardsortering:

SELECT @@collation_server;

Exempelresultat:

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

Sortering på anslutningsnivå

När du kör en fråga mot en MariaDB-databas använder MariaDB ett gäng systemvariabler för att avgöra vilken teckenuppsättning och sortering som ska användas när frågor körs. Om klienten använder en annan teckenuppsättning än servern kan MariaDB översätta den till en lämplig teckenuppsättning och sortering.

När du skickar frågeresultaten tillbaka till klienten kan MariaDB översätta dessa resultat tillbaka till en annan teckenuppsättning helt och hållet om det behövs. MariaDB använder systemvariabler för att bestämma vilka teckenuppsättningar och sammanställningar som ska användas vid vart och ett av dessa steg.

Följande pekar ut anslutningssorteringen (du kan använda samma syntax för vilken som helst av systemvariablerna):

SELECT @@collation_connection;

Exempelresultat:

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

Du kan också returnera alla teckenuppsättningssystemvariabler med följande fråga:

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å databasnivå

Följande sats kan användas för att kontrollera sammanställningen av en given databas:

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

Exempelresultat:

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

Ett annat sätt att göra det är att använda ett påstående som detta:

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

Exempelresultat:

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

Genom att använda denna andra metod kan du få resultaten utan att byta databas.

Här använder den en annan databas:

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

Exempelresultat:

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

Det här är testdatabasen som skapades när jag först installerade MariaDB.

Sortering på tabellnivå

Följande sats returnerar ett antal kolumner som ger information om alla matchande tabeller. En av dessa kolumner kallas Sortering , och det tillhandahåller sammanställning av alla matchande tabeller.

SHOW TABLE STATUS LIKE '%Pets%';

Exempelresultat (med vertikal utdata):

*************************** 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 det här fallet fick jag information om en tabell som heter Husdjur . Vi kan se att Sorteringen kolumnen innehåller utf8mb4_general_ci , som är sammanställningen av tabellen.

Detta uttalande accepterar även andra satser, såsom FROM , VAR och IN , så detta ger dig några alternativ när du bygger ditt uttalande.

Ett annat sätt att få sorteringsinformation om dina tabeller är att köra en fråga mot information_schema.tables :

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

Exempelresultat:

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

Att köra följande fråga returnerar information om varje kolumn i Husdjur tabell. Detta inkluderar sorteringsinformationen.

SHOW FULL COLUMNS FROM Pets;

Exempelresultat:

+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| 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 fråga information_schema.columns . I det här fallet kan vi välja bara de kolumner vi är intresserade av:

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

Exempelresultat:

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

Och ett annat alternativ vi har i vår verktygslåda är att kolla in CREATE TABLE redogörelse för vårt bord.

Så här:

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

Teckenuppsättningen och sorteringsinformationen returneras dock endast om de skiljer sig från tabellens standardsortering. I det här exemplet gjorde sorteringsinformationen inte skiljer sig, och därför returnerades ingen sorteringsinformation.

Låt oss ändra sorteringen:

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

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

Den här gången kan vi se den nya teckenuppsättningen och sorteringsinställningarna mot PetName kolumn.


  1. Hitta alla föräldrar i mysql-tabellen med en enda fråga (Rekursiv fråga)

  2. Snapshot-kontrollfilsfunktion med RMAN och ORA-00245

  3. Oracle PL/SQL:Skapa DML-paket online

  4. MySQL ERROR 1045 (28000):Åtkomst nekad för användaren 'bill'@'localhost' (med lösenord:JA)