MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Pokaż sortowanie w MariaDB

W MariaDB sortowanie może być stosowane na wielu poziomach. Sortowanie można zastosować na poziomie serwera, połączenia, bazy danych, tabeli, a nawet na poziomie kolumn.

Możliwe jest również określenie sortowania na poziomie zapytania, dzięki czemu zastąpi ono wszelkie sortowanie zastosowane na poziomie bazy danych, tabeli lub kolumny.

MariaDB zapewnia wiele opcji zwracania sortowania na różnych poziomach.

Pokaż sortowanie połączenia, serwera i bazy danych

Możemy użyć SHOW VARIABLES oświadczenie administracyjne z LIKE klauzula zwracająca zmienne, które zawierają określony ciąg w swoich nazwach.

Przykład:

SHOW VARIABLES LIKE 'collation%';

Przykładowy wynik:

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

To są wyniki, które otrzymuję w moim środowisku testowym. Otrzymany wynik będzie zależał od Twoich ustawień.

Każda z tych oddzielnych zmiennych może zostać zwrócona oddzielnie, jeśli jest to wymagane (patrz poniżej).

Domyślnie SHOW VARIABLES pokazuje SESSION zmienne. W takim przypadku zwraca wartości obowiązujące dla bieżącego połączenia.

Dlatego poprzedni przykład można przepisać w następujący sposób:

SHOW SESSION VARIABLES LIKE 'collation%';

Przykładowy wynik:

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

Alternatywnie możesz zastąpić SESSION z LOCAL (który jest synonimem SESSION ):

SHOW LOCAL VARIABLES LIKE 'collation%';

Możesz także użyć GLOBAL modyfikator, aby wyświetlić wartości używane dla nowych połączeń z MariaDB.

Przykład:

SHOW GLOBAL VARIABLES LIKE 'collation%';

Przykładowy wynik:

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

Układanie serwerów

Następujące polecenie zwraca domyślne sortowanie serwera:

SELECT @@collation_server;

Przykładowy wynik:

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

Układanie na poziomie połączenia

Po uruchomieniu zapytania w bazie danych MariaDB, MariaDB używa wielu zmiennych systemowych w celu określenia, który zestaw znaków i sortowanie mają być używane przy każdym uruchomieniu zapytań. Jeśli klient używa innego zestawu znaków niż serwer, MariaDB może go przetłumaczyć na odpowiedni zestaw znaków i sortowanie.

Wysyłając wyniki zapytania z powrotem do klienta, MariaDB może w razie potrzeby przetłumaczyć te wyniki z powrotem na inny zestaw znaków. MariaDB używa zmiennych systemowych do określenia, które zestawy znaków i sortowania mają być używane w każdym z tych kroków.

Poniższa lista wyróżnia sortowanie połączeń (możesz użyć tej samej składni dla dowolnej zmiennej systemowej):

SELECT @@collation_connection;

Przykładowy wynik:

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

Możesz również zwrócić wszystkie zmienne systemowe zestawu znaków za pomocą następującego zapytania:

SHOW VARIABLES LIKE 'character_set%';

Wynik:

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

Sortowanie na poziomie bazy danych

Do sprawdzenia sortowania w danej bazie danych można użyć następującej instrukcji:

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

Przykładowy wynik:

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

Innym sposobem na zrobienie tego jest użycie takiego stwierdzenia:

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

Przykładowy wynik:

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

Zastosowanie tej drugiej metody pozwala uzyskać wyniki bez przełączania bazy danych.

Tutaj używa innej bazy danych:

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

Przykładowy wynik:

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

To jest testowa baza danych, która została utworzona podczas pierwszej instalacji MariaDB.

Sortowanie na poziomie tabeli

Poniższa instrukcja zwraca liczbę kolumn, które zawierają informacje o dowolnych pasujących tabelach. Jedna z tych kolumn nazywa się Sortowanie i zapewnia zestawienie wszystkich pasujących tabel.

SHOW TABLE STATUS LIKE '%Pets%';

Przykładowy wynik (przy użyciu wyjścia pionowego):

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

W tym przypadku otrzymałem informacje o tabeli o nazwie Pets . Widzimy, że Collation kolumna zawiera utf8mb4_general_ci , który jest zestawieniem tabeli.

Ta instrukcja akceptuje również inne klauzule, takie jak FROM , WHERE i IN , więc daje to kilka opcji podczas tworzenia oświadczenia.

Innym sposobem uzyskania informacji o sortowaniu tabel jest uruchomienie zapytania względem information_schema.tables :

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

Przykładowy wynik:

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

Sortowanie na poziomie kolumny

Uruchomienie następującego zapytania zwraca informacje o każdej kolumnie w Pets stół. Obejmuje to informacje o sortowaniu.

SHOW FULL COLUMNS FROM Pets;

Przykładowy wynik:

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

Alternatywnie możemy zapytać information_schema.columns . W tym przypadku możemy wybrać tylko te kolumny, które nas interesują:

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

Przykładowy wynik:

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

Inną opcją, którą mamy w naszym zestawie narzędzi, jest sprawdzenie CREATE TABLE zestawienie naszego stołu.

Tak:

SHOW CREATE TABLE Pets;

Wynik:

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

Jednak zestaw znaków i informacje o sortowaniu są zwracane tylko wtedy, gdy różnią się od domyślnego sortowania tabeli. W tym przykładzie informacje o sortowaniu nie różnią się, więc nie zostały zwrócone żadne informacje dotyczące sortowania.

Zmieńmy zestawienie:

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

I uruchom SHOW CREATE TABLE ponownie:

SHOW CREATE TABLE Pets;

Wynik:

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

Tym razem możemy zobaczyć nowy zestaw znaków i ustawienia sortowania względem PetName kolumna.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB MaxScale Load Balancing w Dockerze:Wdrożenie:część pierwsza

  2. Jak naprawić błąd przekroczenia limitu czasu oczekiwania na blokadę w MySQL?

  3. Zrozumienie indeksów w MySQL:część druga

  4. Jak zapewnić wysoką dostępność bazy danych MySQL lub MariaDB w AWS i Google Cloud?

  5. MariaDB Connector/Python Beta już dostępne