Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So finden Sie die Sortierung in MySQL

In MySQL kann die Sortierung auf vielen Ebenen angewendet werden. Es kann auf Serverebene, Verbindungsebene, Datenbankebene, Tabellenebene und sogar auf Spaltenebene angewendet werden. Sie können in Ihren Abfragen auch eine Sortierung angeben, die jede Sortierung überschreibt, die auf Datenbank-, Tabellen- oder Spaltenebene angewendet wurde.

So finden Sie heraus, welche Sortierung auf jeder dieser Ebenen angewendet wird.

Verknüpfung für Verbindung, Server und Datenbanksortierung

Sortierungsinformationen für die Verbindung, den Server und die Datenbank erhalten Sie am schnellsten mit der folgenden Anweisung. Diese Anweisung gibt alle Systemvariablen zurück, die mit collation beginnen :

SHOW VARIABLES LIKE 'collation%';

Dies gibt die Sortierung für den Server, die Verbindung und die Datenbank zurück. So:

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

Sie können bei Bedarf auch jede dieser Systemvariablen separat zurückgeben. Unten finden Sie Anweisungen dazu.

Sortierung auf Serverebene

Das Ausführen des folgenden Befehls gibt die Standardsortierung des Servers zurück.

SELECT @@collation_server;

Beispielergebnis:

+--------------------+
| @@collation_server |
+--------------------+
| utf8mb4_0900_ai_ci |
+--------------------+

Sortierung auf Verbindungsebene

Wenn Sie eine Abfrage für eine MySQL-Datenbank ausführen, verwendet MySQL eine Reihe von Systemvariablen, um zu bestimmen, welcher Zeichensatz und welche Sortierung verwendet werden soll, wenn Abfragen ausgeführt werden. Wenn der Client einen anderen Zeichensatz als der Server verwendet, kann MySQL ihn in einen geeigneten Zeichensatz und eine entsprechende Sortierung übersetzen.

Wenn die Abfrageergebnisse an den Client zurückgesendet werden, kann MySQL diese Ergebnisse bei Bedarf vollständig in einen anderen Zeichensatz zurückübersetzen. MySQL verwendet Systemvariablen, um zu bestimmen, welche Zeichensätze und Sortierungen bei jedem dieser Schritte verwendet werden sollen.

Das Folgende hebt die Verbindungssortierung hervor (Sie können dieselbe Syntax für alle Systemvariablen verwenden):

SELECT @@collation_connection;

Beispielergebnis:

+------------------------+
| @@collation_connection |
+------------------------+
| utf8mb4_0900_ai_ci     |
+------------------------+

Sie können auch alle Zeichensatz-Systemvariablen mit der folgenden Abfrage zurückgeben:

SHOW VARIABLES LIKE 'character_set%';

Beispielergebnis:

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

Vergleich auf Datenbankebene

Die folgende Anweisung kann verwendet werden, um die Sortierung einer bestimmten Datenbank zu überprüfen:

USE Music;
SELECT @@character_set_database, @@collation_database;

Beispielergebnis:

+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8                     | utf8_general_ci      |
+--------------------------+----------------------+

Alternativ können Sie die folgende Anweisung verwenden (die die Änderung der Standarddatenbank überflüssig macht):

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

Beispielergebnis:

+----------------------------+------------------------+
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------------------+------------------------+
| utf8                       | utf8_general_ci        |
+----------------------------+------------------------+

Sortierung auf Tabellenebene

Wenn Sie die folgende Anweisung ausführen, wird eine ganze Reihe von Spalten zurückgegeben, die Informationen über alle übereinstimmenden Tabellen enthalten. Eine dieser Spalten heißt Collation , und es stellt die Sortierung aller übereinstimmenden Tabellen bereit.

SHOW TABLE STATUS LIKE '%Artists%';

Natürlich müssen Sie %Artists% ersetzen mit Ihrem eigenen Tabellennamen. Und Sie können die Prozentzeichen weglassen, wenn Sie der Meinung sind, dass sie nicht benötigt werden. Diese Anweisung akzeptiert auch andere Klauseln wie FROM , WHERE , und IN , das gibt Ihnen also einige Optionen beim Erstellen Ihrer Erklärung.

Ein Problem mit der vorherigen Anweisung besteht darin, dass sie viele Spalten zurückgibt und Sie möglicherweise gezwungen sind, seitwärts zu scrollen, um die Kollatierungsspalte zu finden. Wenn Sie nur an Kollationsinformationen interessiert sind, können Sie information_schema.tables abfragen . Sie können bei Bedarf auch die Sortierung für alle Tabellen in einer bestimmten Datenbank zurückgeben. So geht's:

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

Beispielergebnisse:

+--------------+------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION |
+--------------+------------+-----------------+
| Music        | Albums     | utf8_general_ci |
| Music        | Artists    | utf8_general_ci |
| Music        | Genres     | utf8_general_ci |
+--------------+------------+-----------------+

Sortierung auf Spaltenebene

Das Ausführen der folgenden Abfrage gibt Informationen zu jeder Spalte in einer bestimmten Tabelle zurück. Dazu gehören die Kollationsinformationen.

SHOW FULL COLUMNS FROM Artists;

Das führt dazu, dass viele Spalten mit allen möglichen Informationen über die Spalte zurückgegeben werden, einschließlich der Sortierung.

Sie können die Anzahl der zurückgegebenen Spalten wie folgt reduzieren:

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

Beispielergebnis:

+-------------+--------------------+-----------------+
| COLUMN_NAME | CHARACTER_SET_NAME | COLLATION_NAME  |
+-------------+--------------------+-----------------+
| ArtistId    | NULL               | NULL            |
| ArtistName  | utf8               | utf8_spanish_ci |
| ActiveFrom  | NULL               | NULL            |
+-------------+--------------------+-----------------+

Sie können auch SHOW CREATE TABLE ausführen -Anweisung, um eine Definition der Tabelle (einschließlich ihrer Spalten) anzuzeigen.

SHOW CREATE TABLE Artists;

Dies gibt etwa Folgendes zurück:

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

Der Zeichensatz und die Sortierungsinformationen werden jedoch nur zurückgegeben, wenn sie sich von der Standardsortierung der Tabelle unterscheiden. In diesem Beispiel habe ich explizit den ArtistName festgelegt -Spalte nur zu Demonstrationszwecken in eine andere Sortierung (andernfalls wären die Sortierungsinformationen nicht zurückgegeben worden).