В MySQL съпоставянето може да се прилага на много нива. Може да се прилага на ниво сървър, на ниво връзка, на ниво база данни, на ниво таблица и дори на ниво колона. Можете също да посочите съпоставяне във вашите заявки, което ще отмени всяко съпоставяне, което е приложено на ниво база данни, таблица или колона.
Ето как да разберете какво съпоставяне се прилага на всяко от тези нива.
Пряк път за свързване, сървър и база данни
Най-бързият начин да получите информация за съпоставяне за връзката, сървъра и базата данни е да използвате следното изявление. Този израз връща всички системни променливи, започващи с collation
:
ПОКАЗВАНЕ НА ПРОМЕНЛИВИ КАТО 'collation%';
Това връща съпоставянето за сървъра, връзката и базата данни. Като това:
+----------------------+--------------------+| Име на променлива | Стойност |+----------------------+-------------------+| съпоставяне_връзка | utf8mb4_0900_ai_ci || база_данни за съпоставяне | utf8_general_ci || collation_server | utf8mb4_0900_ai_ci |+---------------------+--------------------+
Можете също да върнете всяка от тези системни променливи поотделно, ако е необходимо. Вижте по-долу за инструкции как да направите това.
Съпоставяне на ниво сървър
Изпълнението на следната команда връща съпоставянето по подразбиране на сървъра.
ИЗБЕРЕТЕ @@collation_server;
Примерен резултат:
+-------------------+| @@collation_server |+-------------------+| utf8mb4_0900_ai_ci |+-------------------+
Сравниване на ниво връзка
Когато изпълнявате заявка към база данни на MySQL, MySQL използва куп системни променливи, за да определи кой набор от знаци и съпоставяне да използва при изпълнение на заявки. Ако клиентът използва различен набор от знаци за сървъра, тогава MySQL може да го преведе в подходящ набор от знаци и съпоставяне.
Когато изпраща резултатите от заявката обратно на клиента, MySQL може да преведе тези резултати обратно в различен набор от символи, ако е необходимо. MySQL използва системни променливи, за да определи кои набори от знаци и съпоставяне да използва при всяка от тези стъпки.
Следното отделя съпоставянето на връзката (можете да използвате същия синтаксис за всяка от системните променливи):
ИЗБЕРЕТЕ @@collation_connection;
Примерен резултат:
+-----------------------+| @@collation_connection |+-----------------------+| utf8mb4_0900_ai_ci |+-----------------------+
Можете също да върнете всички системни променливи на набора от знаци със следната заявка:
ПОКАЖЕТЕ ПРОМЕНИВИ КАТО 'character_set%';
Примерен резултат:
+--------------------+------------------- ---------------+| Име на променлива | Стойност |+--------------------------+-------------------- --------------+| символ_набор_клиент | utf8mb4 || връзка_на_набор | utf8mb4 || база_данни_набор от символи | utf8 || файлова система_набор_символи | двоичен || резултати_набор_символи | utf8mb4 || символ_набор_сървър | utf8mb4 || система_набор_символи | utf8 || директория_набори_символи | /usr/local/mysql/share/charsets/ |+-------------------------+---------- ------------------------+
Сравняване на ниво база данни
Следният израз може да се използва за проверка на съпоставянето на дадена база данни:
ИЗПОЛЗВАЙТЕ музика;ИЗБЕРЕТЕ @@character_set_database, @@collation_database;
Примерен резултат:
+--------------------+------------------- ---+| @@character_set_database | @@collation_database |+------------------------+------------------ ----+| utf8 | utf8_general_ci |+------------------------------+------------------- --+
Като алтернатива можете да използвате следното изявление (което елиминира необходимостта от промяна на базата данни по подразбиране):
ИЗБЕРЕТЕ default_character_set_name, default_collation_nameFROM information_schema.schemata WHERE schema_name ='Music';
Примерен резултат:
+----------------------------+---------------- -------+| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |+----------------------------+------------------ ------+| utf8 | utf8_general_ci |+----------------------------+------------------ ------+
Сравняване на ниво таблица
Изпълнението на следния оператор ще върне цял куп колони, които предоставят информация за всяка съответстваща таблица/и. Една от тези колони се нарича Сравняване и осигурява съпоставяне на всички съвпадащи таблици.
ПОКАЖЕТЕ СТАТУС НА ТАБЛИЦАТА КАТО '%Artists%';
Разбира се, ще трябва да замените %Artists%
със собственото си име на таблица. И можете да пропуснете знаците за процент, ако смятате, че не са необходими. Това изявление приема и други клаузи, като FROM
, WHERE
и IN
, така че това ви дава някои опции при изграждането на вашето изявление.
Един проблем с предишното изявление е, че връща много колони и може да сте принудени да превъртите настрани, за да намерите колоната за съпоставяне. Ако се интересувате само от информацията за съпоставяне, можете да заявите information_schema.tables
. Можете също да върнете съпоставянето за всички таблици в дадена база данни, ако е необходимо. Ето как да направите това:
ИЗБЕРЕТЕ table_schema, table_name, table_collation FROM information_schema.tablesWHERE table_schema ='Музика';
Примерни резултати:
+--------------+------------+-----------------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION |+--------------+-----------+-----------------+| Музика | Албуми | utf8_general_ci || Музика | Художници | utf8_general_ci || Музика | Жанрове | utf8_general_ci |+--------------+-----------+-----------------+предварително>Сравняване на ниво колона
Изпълнението на следната заявка връща информация за всяка колона в дадена таблица. Това включва информацията за съпоставяне.
ПОКАЗВАНЕ НА ПЪЛНИ КОЛОНИ ОТ ИЗПЪЛНИТЕЛИ;Това води до връщане на много колони с всякакъв вид информация за колоната, включително съпоставянето.
Можете да намалите броя на връщаните колони, като направите това:
ИЗБЕРЕТЕ име_на_столона, име_на_набора_символи, име_на_колекция FROM information_schema.columns WHERE table_name ='Изпълнители';Примерен резултат:
+------------+--------------------+----------- ------+| COLUMN_NAME | CHARACTER_SET_NAME | COLLATION_NAME |+-------------+--------------------+------------ -----+| ArtistId | NULL | NULL || Име на изпълнител | utf8 | utf8_spanish_ci || ActiveFrom | NULL | NULL |+------------+--------------------+------------ -----+Можете също да стартирате
SHOW CREATE TABLE
оператор за показване на дефиниция на таблицата (която включва нейните колони).ПОКАЖЕТЕ СЪЗДАВАНЕ НА ТАБЛИЦА Изпълнители;Това връща нещо подобно:
+--------+--------------------------------+| Таблица | Създаване на таблица |+--------+--------------------------------+| Художници | СЪЗДАВАНЕ НА ТАБЛИЦА `Изпълнители` ( `ArtistId` int(11) NOT NULL AUTO_INCREMENT, `ArtistName` varchar(255) НАБОР НА СИМВОЛОВ utf8 COLLATE utf8_spanish_ci NOT NULL, `ActiveFrom` datetime NOT`In`En`En`En`I. AUTO_INCREMENT=17 НАБОР ПО ПОДРАЗБИРАНЕ=utf8 |+--------+------------------------------ -+Въпреки това, наборът от знаци и информацията за съпоставяне се връщат само ако се различават от съпоставянето по подразбиране на таблицата. В този пример изрично зададох
ArtistName
колона към различно съпоставяне само за демонстрационни цели (в противен случай информацията за съпоставяне нямаше да бъде върната).