sql >> Databasteknik >  >> RDS >> Mysql

Hur man hittar sorteringen i MySQL

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).


  1. Graduate Level Felhantering

  2. Hur väljer man datum från kolumnen datetime?

  3. Kör lagrad procedur i SQL Developer?

  4. Förstå Oracles Java på Mac