V MySQL lze řazení použít na mnoha úrovních. Lze jej použít na úrovni serveru, na úrovni připojení, na úrovni databáze, na úrovni tabulky a dokonce i na úrovni sloupců. Ve svých dotazech můžete také zadat řazení, které přepíše jakékoli řazení, které bylo použito na úrovni databáze, tabulky nebo sloupce.
Zde je návod, jak zjistit, jaké řazení se používá na každé z těchto úrovní.
Zkratka pro připojení, server a řazení databáze
Nejrychlejším způsobem, jak získat informace o řazení pro připojení, server a databázi, je použít následující příkaz. Tento příkaz vrací všechny systémové proměnné začínající collation
:
ZOBRAZIT PROMĚNNÉ JAKO 'collation%';
Tím se vrátí řazení pro server, připojení a databázi. Takhle:
+----------------------+--------------------+| Název_proměnné | Hodnota |+----------------------+--------------------+| Collation_connection | utf8mb4_0900_ai_ci || Collation_database | utf8_general_ci || porovnávací_server | utf8mb4_0900_ai_ci |+----------------------+--------------------+
V případě potřeby můžete také vrátit každou z těchto systémových proměnných samostatně. Níže naleznete pokyny, jak to provést.
Řazení na úrovni serveru
Spuštěním následujícího příkazu se vrátí výchozí řazení serveru.
SELECT @@collation_server;
Příklad výsledku:
+---------------------+| @@collation_server |+--------------------+| utf8mb4_0900_ai_ci |+--------------------+
Řazení na úrovni připojení
Když spustíte dotaz na databázi MySQL, použije MySQL spoustu systémových proměnných k určení, kterou znakovou sadu a řazení použít při každém spuštění dotazu. Pokud klient používá jinou znakovou sadu než server, pak ji MySQL může přeložit do vhodné znakové sady a řazení.
Při odesílání výsledků dotazu zpět klientovi může MySQL tyto výsledky v případě potřeby přeložit zpět do jiné znakové sady. MySQL používá systémové proměnné k určení, které znakové sady a řazení použít v každém z těchto kroků.
Následující text vymezuje řazení připojení (pro kteroukoli ze systémových proměnných můžete použít stejnou syntaxi):
SELECT @@collation_connection;
Příklad výsledku:
+------------------------+| @@collation_connection |+------------------------+| utf8mb4_0900_ai_ci |+-------------------------+
Všechny systémové proměnné znakové sady můžete také vrátit pomocí následujícího dotazu:
ZOBRAZIT PROMĚNNÉ JAKO 'character_set%';
Příklad výsledku:
+--------------------------+------------------- ---------------+| Název_proměnné | Hodnota |+--------------------------+-------------------- --------------+| Character_set_client | utf8mb4 || Character_set_connection | utf8mb4 || Character_set_database | utf8 || souborový_systém znakové sady | binární || Character_set_results | utf8mb4 || znak_set_server | utf8mb4 || znaková_množina_systém | utf8 || Character_sets_dir | /usr/local/mysql/share/charsets/ |+--------------------------+----------- ------------------------+
Řazení na úrovni databáze
Následující příkaz lze použít ke kontrole řazení dané databáze:
USE Music;SELECT @@character_set_database, @@collation_database;
Příklad výsledku:
+--------------------------+------------------- ---+| @@character_set_database | @@collation_database |+--------------------------+------------------ ----+| utf8 | utf8_general_ci |+--------------------------+-------------------- --+
Případně můžete použít následující příkaz (který eliminuje potřebu měnit výchozí databázi):
SELECT default_character_set_name, default_collation_nameFROM information_schema.schemata WHERE schema_name ='Music';
Příklad výsledku:
+----------------------------+----------------- -------+| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |+----------------------------+------------------ ------+| utf8 | utf8_general_ci |+----------------------------+------------------- ------+
Řazení na úrovni tabulky
Spuštěním následujícího příkazu se vrátí celá hromada sloupců, které poskytují informace o všech odpovídajících tabulkách. Jeden z těchto sloupců se nazývá Řazení a poskytuje porovnávání všech odpovídajících tabulek.
ZOBRAZIT STAV TABULKY JAKO '%Artists%';
Samozřejmě budete muset nahradit %Artists%
s vlastním názvem tabulky. A můžete vynechat znaménka procenta, pokud si myslíte, že nejsou potřeba. Tento příkaz také přijímá další klauzule, jako je FROM
, WHERE
a IN
, takže vám to dává několik možností při vytváření prohlášení.
Jeden problém s předchozím příkazem je ten, že vrací mnoho sloupců a možná budete nuceni posouvat se do strany, abyste našli porovnávací sloupec. Pokud vás zajímají pouze informace o řazení, můžete se zeptat na information_schema.tables
. V případě potřeby můžete také vrátit řazení pro všechny tabulky v dané databázi. Zde je návod, jak to udělat:
SELECT table_schema, table_name, table_collation FROM information_schema.tablesWHERE table_schema ='Music';
Příklad výsledků:
+--------------+------------+-----------------+ | TABLE_SCHÉMA | TABLE_NAME | TABLE_COLLATION |+--------------+------------+-----------------+| Hudba | Alba | utf8_general_ci || Hudba | Umělci | utf8_general_ci || Hudba | Žánry | utf8_general_ci |+--------------+------------+-----------------+Řazení na úrovni sloupců
Spuštění následujícího dotazu vrátí informace o každém sloupci v dané tabulce. To zahrnuje informace o řazení.
ZOBRAZIT CELÉ SLOUPCE OD umělců;To má za následek, že se vrací mnoho sloupců se všemi druhy informací o sloupci, včetně řazení.
Počet vrácených sloupců můžete snížit takto:
SELECT název_sloupce, název_znakové_sady, název_kolace FROM informační_schéma.columns WHERE název_tabulky ='Umělci';Příklad výsledku:
+-------------+--------------------+------------ ------+| COLUMN_NAME | CHARACTER_SET_NAME | COLLATION_NAME |+-------------+--------------------+------------ -----+| ArtistId | NULL | NULL || Jméno umělce | utf8 | utf8_spanish_ci || AktivníOd | NULL | NULL |+-------------+--------------------+------------ -----+Můžete také spustit
SHOW CREATE TABLE
příkaz k zobrazení definice tabulky (která zahrnuje její sloupce).ZOBRAZIT Umělce VYTVOŘIT TABULKU;Vrátí něco takového:
+---------+--------------------------------+| Tabulka | Vytvořit tabulku |+---------+--------------------------------+| Umělci | VYTVOŘIT TABULKU `Artists` ( `ArtistId` int(11) NOT NULL AUTO_INCREMENT, `ArtistName` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL, `ActiveFrom` datetime NOT NULL,`InnoDI`)KEY AUTO_INCREMENT=17 VÝCHOZÍ CHARSET=utf8 |+---------+------------------------------- -+Informace o znakové sadě a řazení se však vrátí pouze v případě, že se liší od výchozího řazení tabulky. V tomto příkladu jsem explicitně nastavil
ArtistName
sloupec do jiného řazení pouze pro demonstrační účely (jinak by informace o řazení nebyly vráceny).