I MySQL kan sortering användas på många nivåer. Det kan tillämpas på servernivå, anslutningsnivå, databasnivå, tabellnivå och till och med på kolumnnivå. Du kan också ange en sortering i dina frågor som kommer att åsidosätta all sortering som har tillämpats på databas-, tabell- eller kolumnnivåer.
Så här tar du reda på vilken sortering som används på var och en av dessa nivåer.
Genväg för anslutning, server och databassamling
Det snabbaste sättet att få kollationsinformation för anslutningen, servern och databasen är att använda följande uttalande. Denna sats returnerar alla systemvariabler som börjar med collation
:
SHOW VARIABLES LIKE 'collation%';
Detta returnerar sorteringen för servern, anslutningen och databasen. Så här:
+----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_0900_ai_ci | | collation_database | utf8_general_ci | | collation_server | utf8mb4_0900_ai_ci | +----------------------+--------------------+
Du kan också returnera var och en av dessa systemvariabler separat om det behövs. Se nedan för instruktioner om hur du gör det.
Sortering på servernivå
Om du kör följande kommando returneras serverns standardsortering.
SELECT @@collation_server;
Exempelresultat:
+--------------------+ | @@collation_server | +--------------------+ | utf8mb4_0900_ai_ci | +--------------------+
Sortering på anslutningsnivå
När du kör en fråga mot en MySQL-databas använder MySQL ett gäng systemvariabler för att avgöra vilken teckenuppsättning och sortering som ska användas när frågor körs. Om klienten använder en annan teckenuppsättning än servern, kan MySQL översätta den till en lämplig teckenuppsättning och sammanställning.
När du skickar frågeresultaten tillbaka till klienten kan MySQL översätta dessa resultat tillbaka till en helt annan teckenuppsättning om det behövs. MySQL använder systemvariabler för att avgöra vilka teckenuppsättningar och sorteringar som ska användas vid vart och ett av dessa steg.
Följande pekar ut anslutningssorteringen (du kan använda samma syntax för vilken som helst av systemvariablerna):
SELECT @@collation_connection;
Exempelresultat:
+------------------------+ | @@collation_connection | +------------------------+ | utf8mb4_0900_ai_ci | +------------------------+
Du kan också returnera alla teckenuppsättningssystemvariabler med följande fråga:
SHOW VARIABLES LIKE 'character_set%';
Exempelresultat:
+--------------------------+----------------------------------+ | 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/ | +--------------------------+----------------------------------+
Sortering på databasnivå
Följande sats kan användas för att kontrollera sammanställningen av en given databas:
USE Music; SELECT @@character_set_database, @@collation_database;
Exempelresultat:
+--------------------------+----------------------+ | @@character_set_database | @@collation_database | +--------------------------+----------------------+ | utf8 | utf8_general_ci | +--------------------------+----------------------+
Alternativt kan du använda följande sats (vilket eliminerar behovet av att ändra standarddatabasen):
SELECT default_character_set_name, default_collation_name FROM information_schema.schemata WHERE schema_name = 'Music';
Exempelresultat:
+----------------------------+------------------------+ | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | +----------------------------+------------------------+ | utf8 | utf8_general_ci | +----------------------------+------------------------+
Sortering på tabellnivå
Att köra följande sats kommer att returnera ett helt gäng kolumner som ger information om alla matchande tabeller. En av dessa kolumner kallas Sortering , och det tillhandahåller sammanställning av alla matchande tabeller.
SHOW TABLE STATUS LIKE '%Artists%';
Naturligtvis måste du ersätta %Artists%
med ditt eget bordsnamn. Och du kan utelämna procenttecknen om du inte tror att de behövs. Detta uttalande accepterar även andra satser, såsom FROM
, WHERE
och IN
, så detta ger dig några alternativ när du bygger ditt uttalande.
Ett problem med det tidigare uttalandet är att det returnerar många kolumner, och du kan bli tvungen att rulla i sidled för att hitta sorteringskolumnen. Om du bara är intresserad av sorteringsinformationen kan du fråga information_schema.tables
. Du kan också returnera sorteringen för alla tabeller i en given databas om det behövs. Så här gör du det:
SELECT table_schema, table_name, table_collation FROM information_schema.tables WHERE table_schema = 'Music';
Exempelresultat:
+--------------+------------+-----------------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION | +--------------+------------+-----------------+ | Music | Albums | utf8_general_ci | | Music | Artists | utf8_general_ci | | Music | Genres | utf8_general_ci | +--------------+------------+-----------------+
Sortering på kolumnnivå
Att köra följande fråga returnerar information om varje kolumn i en given tabell. Detta inkluderar sorteringsinformationen.
SHOW FULL COLUMNS FROM Artists;
Det resulterar i att många kolumner returneras med all möjlig information om kolumnen, inklusive sorteringen.
Du kan minska antalet returnerade kolumner genom att göra så här:
SELECT column_name, character_set_name, collation_name FROM information_schema.columns WHERE table_name = 'Artists';
Exempelresultat:
+-------------+--------------------+-----------------+ | COLUMN_NAME | CHARACTER_SET_NAME | COLLATION_NAME | +-------------+--------------------+-----------------+ | ArtistId | NULL | NULL | | ArtistName | utf8 | utf8_spanish_ci | | ActiveFrom | NULL | NULL | +-------------+--------------------+-----------------+
Du kan också köra SHOW CREATE TABLE
för att visa en definition av tabellen (som inkluderar dess kolumner).
SHOW CREATE TABLE Artists;
Detta returnerar ungefär så här:
+---------+--------------------------------+ | 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 | +---------+--------------------------------+
Teckenuppsättningen och sorteringsinformationen returneras dock endast om de skiljer sig från tabellens standardsortering. I det här exemplet anger jag uttryckligen ArtistName
kolumn till en annan sortering bara för demonstrationsändamål (annars skulle sorteringsinformationen inte ha returnerats).