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.