sql >> Databáze >  >> RDS >> MariaDB

Zobrazit řazení v MariaDB

V MariaDB lze řazení použít na mnoha úrovních. Porovnání lze použít na úrovni serveru, na úrovni připojení, na úrovni databáze, na úrovni tabulky a dokonce i na úrovni sloupců.

Je také možné určit řazení na úrovni dotazu, takže přepíše jakékoli řazení, které bylo použito na úrovni databáze, tabulky nebo sloupce.

MariaDB poskytuje řadu možností pro vrácení kolace na různých úrovních.

Zobrazit spojení, server a řazení databáze

Můžeme použít SHOW VARIABLES administrativní prohlášení s LIKE klauzule k vrácení proměnných, které ve svých názvech obsahují určitý řetězec.

Příklad:

SHOW VARIABLES LIKE 'collation%';

Příklad výsledku:

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

Toto jsou výsledky, které dostanu ve svém testovacím prostředí. Výsledek bude záviset na vašem nastavení.

Každou z těchto samostatných proměnných lze v případě potřeby vrátit samostatně (viz níže).

Ve výchozím nastavení SHOW VARIABLES zobrazí SESSION proměnné. V tomto případě vrátí hodnoty, které jsou platné pro aktuální připojení.

Předchozí příklad by tedy mohl být přepsán následovně:

SHOW SESSION VARIABLES LIKE 'collation%';

Příklad výsledku:

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

Případně můžete nahradit SESSION s LOCAL (což je synonymum pro SESSION ):

SHOW LOCAL VARIABLES LIKE 'collation%';

Můžete také použít GLOBAL modifikátor pro zobrazení hodnot, které se používají pro nová připojení k MariaDB.

Příklad:

SHOW GLOBAL VARIABLES LIKE 'collation%';

Příklad výsledku:

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

Porovnání serveru

Následující příkaz vrátí výchozí řazení serveru:

SELECT @@collation_server;

Příklad výsledku:

+--------------------+
| @@collation_server |
+--------------------+
| utf8mb4_general_ci |
+--------------------+

Řazení na úrovni připojení

Když spustíte dotaz na databázi MariaDB, MariaDB používá 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, MariaDB ji může přeložit do vhodné znakové sady a řazení.

Při odesílání výsledků dotazu zpět klientovi může MariaDB tyto výsledky v případě potřeby přeložit zpět do jiné znakové sady. MariaDB 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 |
+------------------------+
| utf8_general_ci        |
+------------------------+

Všechny systémové proměnné znakové sady můžete také vrátit pomocí následujícího dotazu:

SHOW VARIABLES LIKE 'character_set%';

Výsledek:

+--------------------------+--------------------------------------------------------+
| Variable_name            | Value                                                  |
+--------------------------+--------------------------------------------------------+
| character_set_client     | utf8                                                   |
| character_set_connection | utf8                                                   |
| character_set_database   | utf8mb4                                                |
| character_set_filesystem | binary                                                 |
| character_set_results    | utf8                                                   |
| character_set_server     | utf8mb4                                                |
| character_set_system     | utf8                                                   |
| character_sets_dir       | /usr/local/Cellar/mariadb/10.5.9/share/mysql/charsets/ |
+--------------------------+--------------------------------------------------------+

Řazení na úrovni databáze

Následující příkaz lze použít ke kontrole řazení dané databáze:

USE PetHouse;
SELECT @@character_set_database, @@collation_database;

Příklad výsledku:

+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4                  | utf8mb4_general_ci   |
+--------------------------+----------------------+

Dalším způsobem, jak to udělat, je použít příkaz jako tento:

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

Příklad výsledku:

+----------------------------+------------------------+
| default_character_set_name | default_collation_name |
+----------------------------+------------------------+
| utf8mb4                    | utf8mb4_general_ci     |
+----------------------------+------------------------+

Použití této druhé metody vám umožní získat výsledky bez přepínání databáze.

Zde používá jinou databázi:

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

Příklad výsledku:

+----------------------------+------------------------+
| default_character_set_name | default_collation_name |
+----------------------------+------------------------+
| latin1                     | latin1_swedish_ci      |
+----------------------------+------------------------+

Toto je testovací databáze, která byla vytvořena, když jsem poprvé nainstaloval MariaDB.

Řazení na úrovni tabulky

Následující příkaz vrátí počet sloupců, které poskytují informace o jakékoli odpovídající tabulce/tabulkách. Jeden z těchto sloupců se nazývá Řazení a poskytuje porovnávání všech odpovídajících tabulek.

SHOW TABLE STATUS LIKE '%Pets%';

Příklad výsledku (pomocí vertikálního výstupu):

*************************** 1. row ***************************
            Name: Pets
          Engine: InnoDB
         Version: 10
      Row_format: Dynamic
            Rows: 8
  Avg_row_length: 2048
     Data_length: 16384
 Max_data_length: 0
    Index_length: 32768
       Data_free: 0
  Auto_increment: NULL
     Create_time: 2021-03-30 09:10:38
     Update_time: 2021-03-30 09:16:39
      Check_time: NULL
       Collation: utf8mb4_general_ci
        Checksum: NULL
  Create_options: 
         Comment: 
Max_index_length: 0
       Temporary: N

V tomto případě jsem získal informace o tabulce s názvem Pets . Vidíme, že Collation sloupec obsahuje utf8mb4_general_ci , což je seřazení tabulky.

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

Dalším způsobem, jak získat informace o řazení o vašich tabulkách, je spustit dotaz proti information_schema.tables :

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

Příklad výsledku:

+--------------+---------------+--------------------+
| table_schema | table_name    | table_collation    |
+--------------+---------------+--------------------+
| pethouse     | vpettypecount | NULL               |
| pethouse     | Pets          | utf8mb4_general_ci |
| pethouse     | Owners        | utf8mb4_general_ci |
| pethouse     | PetTypes      | utf8mb4_general_ci |
+--------------+---------------+--------------------+

Řazení na úrovni sloupců

Spuštění následujícího dotazu vrátí informace o každém sloupci v Pets stůl. To zahrnuje informace o řazení.

SHOW FULL COLUMNS FROM Pets;

Příklad výsledku:

+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| Field     | Type        | Collation          | Null | Key | Default | Extra | Privileges                      | Comment |
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| PetId     | int(11)     | NULL               | NO   | PRI | NULL    |       | select,insert,update,references |         |
| PetTypeId | int(11)     | NULL               | NO   | MUL | NULL    |       | select,insert,update,references |         |
| OwnerId   | int(11)     | NULL               | NO   | MUL | NULL    |       | select,insert,update,references |         |
| PetName   | varchar(60) | utf8mb4_general_ci | NO   |     | NULL    |       | select,insert,update,references |         |
| DOB       | date        | NULL               | YES  |     | NULL    |       | select,insert,update,references |         |
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+

Případně můžeme zadat dotaz na information_schema.columns . V tomto případě si můžeme vybrat pouze sloupce, které nás zajímají:

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

Příklad výsledku:

+-------------+--------------------+--------------------+
| column_name | character_set_name | collation_name     |
+-------------+--------------------+--------------------+
| PetId       | NULL               | NULL               |
| PetTypeId   | NULL               | NULL               |
| OwnerId     | NULL               | NULL               |
| PetName     | utf8mb4            | utf8mb4_general_ci |
| DOB         | NULL               | NULL               |
+-------------+--------------------+--------------------+

A další možností, kterou máme v naší sadě nástrojů, je podívat se na CREATE TABLE výpis z naší tabulky.

Takhle:

SHOW CREATE TABLE Pets;

Výsledek:

+-------+------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
+-------+------------------------------+
| Pets  | CREATE TABLE `Pets` (
  `PetId` int(11) NOT NULL,
  `PetTypeId` int(11) NOT NULL,
  `OwnerId` int(11) NOT NULL,
  `PetName` varchar(60) NOT NULL,
  `DOB` date DEFAULT NULL,
  PRIMARY KEY (`PetId`),
  KEY `PetTypeId` (`PetTypeId`),
  KEY `OwnerId` (`OwnerId`),
  CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`),
  CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+-------------------------------+

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 informace o řazení nebyly se liší, a proto nebyly vráceny žádné informace o řazení.

Změňme řazení:

ALTER TABLE Pets 
MODIFY PetName VARCHAR(255) 
    CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL;

A spusťte SHOW CREATE TABLE znovu:

SHOW CREATE TABLE Pets;

Výsledek:

+-------+------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
+-------+------------------------------+
| Pets  | CREATE TABLE `Pets` (
  `PetId` int(11) NOT NULL,
  `PetTypeId` int(11) NOT NULL,
  `OwnerId` int(11) NOT NULL,
  `PetName` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
  `DOB` date DEFAULT NULL,
  PRIMARY KEY (`PetId`),
  KEY `PetTypeId` (`PetTypeId`),
  KEY `OwnerId` (`OwnerId`),
  CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`),
  CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+-------------------------------+

Tentokrát můžeme vidět novou znakovou sadu a nastavení řazení proti PetName sloupec.


  1. Základy paralelního programování s rámcem Fork/Join v Javě

  2. Provádění více příkazů pomocí Postgresql přes SQLAlchemy neuchová změny

  3. Automatické generování souboru odpovědí

  4. Může být cizí klíč NULL a/nebo duplicitní?