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

Как да намерите съпоставянето в MySQL

В 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 колона към различно съпоставяне само за демонстрационни цели (в противен случай информацията за съпоставяне нямаше да бъде върната).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изберете последния ред в MySQL

  2. SQL заявка:Изтриване на всички записи от таблицата с изключение на последния N?

  3. Създайте нов потребител в MySQL и му дайте пълен достъп до една база данни

  4. Произнася ли се „S-Q-L“ или „Продължение“?

  5. Rails, MySQL и Snow Leopard