MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Покажете съпоставянето в MariaDB

В MariaDB съпоставянето може да се прилага на много нива. Съпоставянето може да се приложи на ниво сървър, на ниво връзка, на ниво база данни, на ниво таблица и дори на ниво колона.

Възможно е също така да посочите съпоставяне на ниво заявка, така че да отмени всяко съпоставяне, което е приложено на ниво база данни, таблица или колона.

MariaDB предоставя редица опции за връщане на съпоставянето на различните нива.

Показване на съпоставянето на връзката, сървъра и базата данни

Можем да използваме SHOW VARIABLES административно изявление с LIKE клауза за връщане на променливи, които включват определен низ в техните имена.

Пример:

SHOW VARIABLES LIKE 'collation%';

Примерен резултат:

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

Това са резултатите, които получавам в моята тестова среда. Резултатът, който ще получите, ще зависи от вашите настройки.

Всяка от тези отделни променливи може да бъде върната отделно, ако е необходимо (вижте по-долу).

По подразбиране SHOW VARIABLES показва SESSION променливи. В този случай той връща стойностите, които са в сила за текущата връзка.

Следователно предишният пример може да бъде пренаписан, както следва:

SHOW SESSION VARIABLES LIKE 'collation%';

Примерен резултат:

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

Като алтернатива можете да замените SESSION с LOCAL (което е синоним на SESSION ):

SHOW LOCAL VARIABLES LIKE 'collation%';

Можете също да използвате GLOBAL модификатор за показване на стойностите, които се използват за нови връзки към MariaDB.

Пример:

SHOW GLOBAL VARIABLES LIKE 'collation%';

Примерен резултат:

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

Съпоставяне на сървъра

Следната команда връща съпоставянето по подразбиране на сървъра:

SELECT @@collation_server;

Примерен резултат:

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

Сравниване на ниво връзка

Когато изпълнявате заявка към база данни на MariaDB, MariaDB използва куп системни променливи, за да определи кой набор от знаци и съпоставяне да използва при изпълнение на заявки. Ако клиентът използва различен набор от знаци за сървъра, тогава MariaDB може да го преведе в подходящ набор от знаци и съпоставяне.

Когато изпраща резултатите от заявката обратно на клиента, MariaDB може да преведе тези резултати обратно в различен набор от символи, ако е необходимо. MariaDB използва системни променливи, за да определи кои набори от знаци и съпоставяне да използва при всяка от тези стъпки.

Следното отделя съпоставянето на връзката (можете да използвате същия синтаксис за всяка от системните променливи):

SELECT @@collation_connection;

Примерен резултат:

+------------------------+
| @@collation_connection |
+------------------------+
| utf8_general_ci        |
+------------------------+

Можете също да върнете всички системни променливи на набора от знаци със следната заявка:

SHOW VARIABLES LIKE 'character_set%';

Резултат:

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

Сравняване на ниво база данни

Следният израз може да се използва за проверка на съпоставянето на дадена база данни:

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

Примерен резултат:

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

Друг начин да го направите е да използвате изявление като това:

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

Примерен резултат:

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

Използването на този втори метод ви позволява да получите резултатите, без да превключвате базата данни.

Тук той използва различна база данни:

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

Примерен резултат:

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

Това е тестовата база данни, която беше създадена, когато за първи път инсталирах MariaDB.

Сравняване на ниво таблица

Следващият оператор връща редица колони, които предоставят информация за всяка съответстваща таблица/и. Една от тези колони се нарича Сравняване и осигурява съпоставяне на всички съвпадащи таблици.

SHOW TABLE STATUS LIKE '%Pets%';

Примерен резултат (с помощта на вертикален изход):

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

В този случай получих информация за таблица, наречена Pets . Можем да видим, че Collation колоната съдържа utf8mb4_general_ci , което е съпоставянето на таблицата.

Това изявление приема и други клаузи, като FROM , WHERE и IN , така че това ви дава някои опции при изграждането на вашето изявление.

Друг начин да получите информация за съпоставяне за вашите таблици е да изпълните заявка срещу information_schema.tables :

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

Примерен резултат:

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

Сравняване на ниво колона

Изпълнението на следната заявка връща информация за всяка колона в Pets маса. Това включва информацията за съпоставяне.

SHOW FULL COLUMNS FROM Pets;

Примерен резултат:

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

Като алтернатива можем да потърсим information_schema.columns . В този случай можем да изберем само колоните, които ни интересуват:

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

Примерен резултат:

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

И друга опция, която имаме в нашия инструментариум, е да проверим CREATE TABLE изявление на нашата маса.

Като това:

SHOW CREATE TABLE Pets;

Резултат:

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

Въпреки това, наборът от знаци и информацията за съпоставяне се връщат само ако се различават от съпоставянето по подразбиране на таблицата. В този пример информацията за съпоставяне не се различават и така не бе върната информация за съпоставяне.

Нека променим съпоставянето:

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

И стартирайте SHOW CREATE TABLE отново:

SHOW CREATE TABLE Pets;

Резултат:

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

Този път можем да видим новия набор от знаци и настройки за съпоставяне срещу PetName колона.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB 10.6 и NextCloud:COMPRESSED Редът е само за четене по подразбиране

  2. MariaDB SCHEMA() Обяснено

  3. MariaDB JSON_REPLACE() Обяснено

  4. 4 начина да получите съпоставяне на база данни в MariaDB

  5. Как да разположите MariaDB клъстер за висока наличност