W MySQL sortowanie może być stosowane na wielu poziomach. Może być stosowany na poziomie serwera, połączenia, bazy danych, tabeli, a nawet na poziomie kolumn. Możesz również określić sortowanie w zapytaniach, które zastąpi wszelkie sortowanie zastosowane na poziomie bazy danych, tabeli lub kolumny.
Oto jak dowiedzieć się, jakie sortowanie jest stosowane na każdym z tych poziomów.
Skrót do sortowania połączeń, serwerów i baz danych
Najszybszym sposobem uzyskania informacji o sortowaniu dla połączenia, serwera i bazy danych jest użycie poniższej instrukcji. Ta instrukcja zwraca wszystkie zmienne systemowe zaczynające się od collation
:
SHOW VARIABLES LIKE 'collation%';
Zwraca sortowanie dla serwera, połączenia i bazy danych. Tak:
+----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_0900_ai_ci | | collation_database | utf8_general_ci | | collation_server | utf8mb4_0900_ai_ci | +----------------------+--------------------+
W razie potrzeby możesz również zwrócić każdą z tych zmiennych systemowych osobno. Poniżej znajdziesz instrukcje, jak to zrobić.
Sortowanie na poziomie serwera
Uruchomienie następującego polecenia zwraca domyślne sortowanie serwera.
SELECT @@collation_server;
Przykładowy wynik:
+--------------------+ | @@collation_server | +--------------------+ | utf8mb4_0900_ai_ci | +--------------------+
Układanie na poziomie połączenia
Gdy uruchamiasz zapytanie w bazie danych MySQL, MySQL używa wielu zmiennych systemowych w celu określenia zestawu znaków i sortowania, które mają być używane przy uruchamianiu zapytań. Jeśli klient używa innego zestawu znaków niż serwer, MySQL może go przetłumaczyć na odpowiedni zestaw znaków i sortowanie.
Wysyłając wyniki zapytania z powrotem do klienta, MySQL może w razie potrzeby przetłumaczyć te wyniki z powrotem na inny zestaw znaków. MySQL 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 | +------------------------+ | utf8mb4_0900_ai_ci | +------------------------+
Możesz również zwrócić wszystkie zmienne systemowe zestawu znaków za pomocą następującego zapytania:
SHOW VARIABLES LIKE 'character_set%';
Przykładowy wynik:
+--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/ | +--------------------------+----------------------------------+
Sortowanie na poziomie bazy danych
Do sprawdzenia sortowania w danej bazie danych można użyć następującej instrukcji:
USE Music; SELECT @@character_set_database, @@collation_database;
Przykładowy wynik:
+--------------------------+----------------------+ | @@character_set_database | @@collation_database | +--------------------------+----------------------+ | utf8 | utf8_general_ci | +--------------------------+----------------------+
Alternatywnie możesz użyć następującej instrukcji (która eliminuje potrzebę zmiany domyślnej bazy danych):
SELECT default_character_set_name, default_collation_name FROM information_schema.schemata WHERE schema_name = 'Music';
Przykładowy wynik:
+----------------------------+------------------------+ | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | +----------------------------+------------------------+ | utf8 | utf8_general_ci | +----------------------------+------------------------+
Sortowanie na poziomie tabeli
Uruchomienie poniższej instrukcji zwróci całą masę kolumn, które zawierają informacje o dowolnej pasującej tabeli/tabelach. Jedna z tych kolumn nazywa się Sortowanie i zapewnia zestawienie wszystkich pasujących tabel.
SHOW TABLE STATUS LIKE '%Artists%';
Oczywiście będziesz musiał zastąpić %Artists%
z własną nazwą stołu. I możesz pominąć znaki procentowe, jeśli uważasz, że nie są one potrzebne. Ta instrukcja akceptuje również inne klauzule, takie jak FROM
, WHERE
i IN
, więc daje to kilka opcji podczas tworzenia oświadczenia.
Jednym z problemów z poprzednią instrukcją jest to, że zwraca ona wiele kolumn i możesz być zmuszony do przewijania w bok, aby znaleźć kolumnę sortowania. Jeśli interesują Cię tylko informacje o sortowaniu, możesz zapytać o information_schema.tables
. W razie potrzeby można również zwrócić sortowanie dla wszystkich tabel w danej bazie danych. Oto jak to zrobić:
SELECT table_schema, table_name, table_collation FROM information_schema.tables WHERE table_schema = 'Music';
Przykładowe wyniki:
+--------------+------------+-----------------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION | +--------------+------------+-----------------+ | Music | Albums | utf8_general_ci | | Music | Artists | utf8_general_ci | | Music | Genres | utf8_general_ci | +--------------+------------+-----------------+
Sortowanie na poziomie kolumny
Uruchomienie następującego zapytania zwraca informacje o każdej kolumnie w danej tabeli. Obejmuje to informacje o sortowaniu.
SHOW FULL COLUMNS FROM Artists;
Powoduje to, że wiele kolumn jest zwracanych z różnego rodzaju informacjami o kolumnie, w tym sortowaniem.
Możesz zmniejszyć liczbę zwracanych kolumn, wykonując następujące czynności:
SELECT column_name, character_set_name, collation_name FROM information_schema.columns WHERE table_name = 'Artists';
Przykładowy wynik:
+-------------+--------------------+-----------------+ | COLUMN_NAME | CHARACTER_SET_NAME | COLLATION_NAME | +-------------+--------------------+-----------------+ | ArtistId | NULL | NULL | | ArtistName | utf8 | utf8_spanish_ci | | ActiveFrom | NULL | NULL | +-------------+--------------------+-----------------+
Możesz także uruchomić SHOW CREATE TABLE
oświadczenie, aby wyświetlić definicję tabeli (wraz z jej kolumnami).
SHOW CREATE TABLE Artists;
To zwraca coś takiego:
+---------+--------------------------------+ | Table | Create Table | +---------+--------------------------------+ | Artists | CREATE TABLE `Artists` ( `ArtistId` int(11) NOT NULL AUTO_INCREMENT, `ArtistName` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL, `ActiveFrom` datetime NOT NULL, PRIMARY KEY (`ArtistId`) ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 | +---------+--------------------------------+
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 jawnie ustawiłem ArtistName
kolumna do innego sortowania tylko w celach demonstracyjnych (w przeciwnym razie informacje o sortowaniu nie zostałyby zwrócone).