sql >> Database >  >> RDS >> MariaDB

Toon de sortering in MariaDB

In MariaDB kan sortering op veel niveaus worden toegepast. Sortering kan worden toegepast op serverniveau, verbindingsniveau, databaseniveau, tabelniveau en zelfs op kolomniveau.

Het is ook mogelijk om een ​​sortering op queryniveau op te geven, zodat deze elke sortering die op database-, tabel- of kolomniveau is toegepast, overschrijft.

MariaDB biedt een aantal opties voor het retourneren van de sortering op de verschillende niveaus.

Toon de verbinding, server en databasesortering

We kunnen de SHOW VARIABLES . gebruiken administratieve verklaring met de LIKE clausule om variabelen te retourneren die een bepaalde tekenreeks in hun naam bevatten.

Voorbeeld:

SHOW VARIABLES LIKE 'collation%';

Voorbeeld resultaat:

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

Dit zijn de resultaten die ik krijg in mijn testomgeving. Het resultaat dat u krijgt, hangt af van uw instellingen.

Elk van deze afzonderlijke variabelen kan indien nodig afzonderlijk worden geretourneerd (zie hieronder).

Standaard SHOW VARIABLES toont de SESSION variabelen. In dit geval worden de waarden geretourneerd die van kracht zijn voor de huidige verbinding.

Daarom zou het vorige voorbeeld als volgt kunnen worden herschreven:

SHOW SESSION VARIABLES LIKE 'collation%';

Voorbeeld resultaat:

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

Als alternatief kunt u SESSION . vervangen met LOCAL (wat een synoniem is voor SESSION ):

SHOW LOCAL VARIABLES LIKE 'collation%';

U kunt ook de GLOBAL . gebruiken modifier om de waarden weer te geven die worden gebruikt voor nieuwe verbindingen met MariaDB.

Voorbeeld:

SHOW GLOBAL VARIABLES LIKE 'collation%';

Voorbeeld resultaat:

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

Serversortering

De volgende opdracht retourneert de standaardsortering van de server:

SELECT @@collation_server;

Voorbeeld resultaat:

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

Collatie op verbindingsniveau

Wanneer u een query uitvoert op een MariaDB-database, gebruikt MariaDB een aantal systeemvariabelen om te bepalen welke tekenset en sortering moet worden gebruikt wanneer query's worden uitgevoerd. Als de client een andere tekenset dan de server gebruikt, kan MariaDB deze vertalen naar een geschikte tekenset en sortering.

Bij het terugsturen van de queryresultaten naar de client, kan MariaDB deze resultaten desgewenst terugvertalen naar een andere tekenset. MariaDB gebruikt systeemvariabelen om te bepalen welke tekensets en sorteringen bij elk van deze stappen moeten worden gebruikt.

Het volgende onderscheidt de verbindingssortering (u kunt dezelfde syntaxis gebruiken voor elk van de systeemvariabelen):

SELECT @@collation_connection;

Voorbeeld resultaat:

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

U kunt ook alle systeemvariabelen van de tekenset retourneren met de volgende vraag:

SHOW VARIABLES LIKE 'character_set%';

Resultaat:

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

Sorteren op databaseniveau

De volgende verklaring kan worden gebruikt om de sortering van een bepaalde database te controleren:

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

Voorbeeld resultaat:

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

Een andere manier om dit te doen, is om een ​​verklaring als deze te gebruiken:

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

Voorbeeld resultaat:

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

Door deze tweede methode te gebruiken, kunt u de resultaten krijgen zonder van database te wisselen.

Hier gebruikt het een andere database:

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

Voorbeeld resultaat:

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

Dit is de testdatabase die is gemaakt toen ik MariaDB voor het eerst installeerde.

Sorteren op tabelniveau

De volgende instructie retourneert een aantal kolommen die informatie geven over eventuele overeenkomende tabellen. Een van deze kolommen heet Collatie , en het biedt de verzameling van alle overeenkomende tabellen.

SHOW TABLE STATUS LIKE '%Pets%';

Voorbeeldresultaat (met verticale uitvoer):

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

In dit geval kreeg ik informatie over een tafel genaamd Pets . We kunnen zien dat de Collation kolom bevat utf8mb4_general_ci , wat de verzameling van de tabel is.

Deze verklaring accepteert ook andere clausules, zoals FROM , WHERE , en IN , dus dit geeft je een aantal opties bij het samenstellen van je verklaring.

Een andere manier om informatie over uw tabellen te verzamelen, is door een query uit te voeren op information_schema.tables :

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

Voorbeeld resultaat:

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

Sorteren op kolomniveau

Als u de volgende zoekopdracht uitvoert, wordt informatie geretourneerd over elke kolom in de Pets tafel. Dit omvat de sorteerinformatie.

SHOW FULL COLUMNS FROM Pets;

Voorbeeld resultaat:

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

Als alternatief kunnen we information_schema.columns . opvragen . In dit geval kunnen we alleen de kolommen kiezen waarin we geïnteresseerd zijn:

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

Voorbeeld resultaat:

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

En een andere optie die we in onze toolkit hebben, is om de CREATE TABLE te bekijken verklaring van onze tafel.

Zoals dit:

SHOW CREATE TABLE Pets;

Resultaat:

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

De tekenset en sorteergegevens worden echter alleen geretourneerd als ze verschillen van de standaardsortering van de tabel. In dit voorbeeld deed de sorteerinformatie niet verschillen, en er is dus geen sorteerinformatie geretourneerd.

Laten we de sortering wijzigen:

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

En voer SHOW CREATE TABLE . uit nogmaals:

SHOW CREATE TABLE Pets;

Resultaat:

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

Deze keer kunnen we de nieuwe tekenset en sorteerinstellingen zien tegen de PetName kolom.


  1. CAST(DATETIME AS DATE) over WHERE-component

  2. Postgresql UUID ondersteund door Hibernate?

  3. Een aangepaste ORDER BY-volgorde definiëren in mySQL

  4. SQL Client voor Mac OS X die werkt met MS SQL Server