sql >> Database teknologi >  >> RDS >> Mysql

Sådan finder du sorteringen i MySQL

I MySQL kan sortering anvendes på mange niveauer. Det kan anvendes på serverniveau, forbindelsesniveau, databaseniveau, tabelniveau og endda på kolonneniveau. Du kan også angive en sortering i dine forespørgsler, der vil tilsidesætte enhver sortering, der er blevet anvendt på database-, tabel- eller kolonneniveauer.

Sådan finder du ud af, hvilken sortering der anvendes på hvert af disse niveauer.

Genvej til forbindelse, server og databasesamling

Den hurtigste måde at få sorteringsoplysninger for forbindelsen, serveren og databasen er at bruge følgende erklæring. Denne sætning returnerer alle systemvariabler, der starter med collation :

SHOW VARIABLES LIKE 'collation%';

Dette returnerer sorteringen for serveren, forbindelsen og databasen. Sådan:

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

Du kan også returnere hver af disse systemvariable separat, hvis det kræves. Se nedenfor for instruktioner om, hvordan du gør det.

Sortering på serverniveau

Kørsel af følgende kommando returnerer serverens standardsortering.

SELECT @@collation_server;

Eksempelresultat:

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

Sortering på forbindelsesniveau

Når du kører en forespørgsel mod en MySQL-database, bruger MySQL en masse systemvariabler til at bestemme, hvilket tegnsæt og sortering, der skal bruges, når der køres forespørgsler. Hvis klienten bruger et andet tegnsæt end serveren, kan MySQL oversætte det til et passende tegnsæt og sortering.

Når forespørgselsresultaterne sendes tilbage til klienten, kan MySQL om nødvendigt oversætte disse resultater tilbage til et helt andet tegnsæt. MySQL bruger systemvariabler til at bestemme, hvilke tegnsæt og kollationer der skal bruges ved hvert af disse trin.

Følgende fremhæver forbindelsessorteringen (du kan bruge den samme syntaks for enhver af systemvariablerne):

SELECT @@collation_connection;

Eksempelresultat:

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

Du kan også returnere alle tegnsætsystemvariabler med følgende forespørgsel:

SHOW VARIABLES LIKE 'character_set%';

Eksempelresultat:

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

Følgende sætning kan bruges til at kontrollere sammenstillingen af ​​en given database:

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

Eksempelresultat:

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

Alternativt kan du bruge følgende sætning (hvilket eliminerer behovet for at ændre standarddatabasen):

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

Eksempelresultat:

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

Sortering på tabelniveau

Kørsel af følgende sætning vil returnere en hel masse kolonner, der giver information om enhver matchende tabel/er. En af disse kolonner kaldes Samling , og det giver sammenstillingen af ​​alle matchende tabeller.

SHOW TABLE STATUS LIKE '%Artists%';

Selvfølgelig skal du erstatte %Artists% med dit eget bordnavn. Og du kan udelade procenttegnene, hvis du ikke synes, de er nødvendige. Denne erklæring accepterer også andre klausuler, såsom FROM , WHERE og IN , så dette giver dig nogle muligheder, når du bygger din erklæring.

Et problem med den tidligere sætning er, at den returnerer mange kolonner, og du kan blive tvunget til at rulle sidelæns for at finde sorteringskolonnen. Hvis du kun er interesseret i sorteringsoplysningerne, kan du forespørge information_schema.tables . Du kan også returnere sorteringen for alle tabeller i en given database, hvis det kræves. Sådan gør du det:

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

Eksempelresultater:

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

Sortering på kolonneniveau

Kørsel af følgende forespørgsel returnerer oplysninger om hver kolonne i en given tabel. Dette inkluderer sorteringsoplysningerne.

SHOW FULL COLUMNS FROM Artists;

Det resulterer i, at mange kolonner bliver returneret med alle mulige oplysninger om kolonnen, inklusive sorteringen.

Du kan reducere antallet af returnerede kolonner ved at gøre dette:

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

Eksempelresultat:

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

Du kan også køre SHOW CREATE TABLE sætning for at vise en definition af tabellen (som inkluderer dens kolonner).

SHOW CREATE TABLE Artists;

Dette returnerer noget som dette:

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

Tegnsættet og sorteringsoplysningerne returneres dog kun, hvis de adskiller sig fra tabellens standardsortering. I dette eksempel indstillede jeg eksplicit ArtistName kolonne til en anden sortering kun til demonstrationsformål (ellers ville sorteringsoplysningerne ikke være blevet returneret).


  1. Lave beregninger i MySQL vs PHP

  2. Hvordan laver man arvemodellering i relationelle databaser?

  3. Sådan gemmer du gentagne datoer med sommertid i tankerne

  4. Sådan konverteres Unix-epoke til et tidsstempel