Подробное объяснение набора символов MySQL и правил сопоставления, а также набора символов представления MySQL и правил сопоставления.

Подробное объяснение набора символов MySQL и правил сортировки.

Прежде чем объяснять наборы символов и правила корректуры, давайте кратко рассмотрим символы, наборы символов и кодировки символов.

Символ (Character) — собирательное название букв, цифр и символов в компьютерах.Символом может быть китайский иероглиф, английская буква, арабская цифра, знак препинания и т. д.

Компьютеры хранят данные в двоичной форме. Цифры, английский язык, знаки препинания, китайские иероглифы и другие символы, которые мы обычно видим на дисплее, являются результатом преобразования двоичных чисел.

Набор символов (Набор символов) определяет соответствие между символами и двоичными числами и присваивает символам уникальные номера. Общие наборы символов включают ASCII, GBK, IOS-8859-1 и т. д.

Кодировку символов (кодировку символов) также можно назвать кодом набора символов, который определяет, как хранить номера символов в компьютере.

大部分字符集都只对应一种字符编码,例如:ASCII、IOS-8859-1、GB2312、GBK,都是既表示了字符集又表示了对应的字符编码。所以一般情况下,可以将两者视为同义词。Unicode 字符集除外,Unicode 有三种编码方案,即 UTF-8、UTF-16 和 UTF-32。最为常用的是 UTF-8 编码。

 Правила сопоставления также можно назвать правилами сопоставления, которые относятся к правилам сравнения между символами одного и того же набора символов. Между наборами символов и правилами сопоставления существует связь «один ко многим», и каждый набор символов имеет правило сопоставления по умолчанию. Наборы символов и правила сортировки дополняют друг друга и взаимозависимы.

Проще говоря, наборы символов используются для определения того, как MySQL хранит строки, а правила сопоставления используются для определения того, как MySQL сравнивает строки.

Друзья, которые хотят узнать о наборах символов ASCII, GB2312, GBK и Unicode, могут нажать на следующую ссылку, чтобы прочитать и узнать:

В некоторых базах данных нет четкого различия между наборами символов и правилами сортировки. Например, при создании базы данных в SQL Server выбор набора символов эквивалентен выбору набора символов и правил сортировки.

В MySQL набор символов и правила сопоставления разделены, поэтому необходимо установить набор символов и правила сопоставления. В обычных обстоятельствах особых требований нет, просто установите одно из них. Когда установлен только набор символов, MySQL установит правила сопоставления в соответствии с соответствующими правилами сопоставления по умолчанию в наборе символов.

Дачан, старший инженер по базам данных, практическое обучение работе с базой данных mysql icon-default.png?t=N7T8https://edu.csdn.net/course/detail/39021

Вы можетеSHOW VARIABLES LIKE 'character%';проверить набор символов, используемый в настоящее время MySQL, с помощью команды. Команда и результаты ее выполнения следующие:

mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | gbk                                                     |
| character_set_connection | gbk                                                     |
| character_set_database   | latin1                                                  |
| character_set_filesystem | binary                                                  |
| character_set_results    | gbk                                                     |
| character_set_server     | latin1                                                  |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.01 sec)

 Вышеупомянутые результаты работы объяснены в следующей таблице:

имя иллюстрировать
персонаж_set_client Набор символов, используемый клиентом MySQL
character_set_connection Набор символов, используемый при подключении к базе данных
character_set_database Создайте набор символов, используемый базой данных.
character_set_filesystem Набор символов, используемый файловой системой сервера MySQL.Значение по умолчанию — двоичное, без какого-либо преобразования.
character_set_results Набор символов, используемый базой данных при возврате данных клиенту.
character_set_server Набором символов, используемым сервером MySQL, рекомендуется управлять самой системой, а не определять вручную.
character_set_system Набор символов, используемый системой базы данных. Значением по умолчанию является utf8, его не нужно задавать.
character_sets_dir Каталог установки набора символов

При появлении искаженных символов вам не нужно беспокоиться о трех системных переменныхcharacter_set_filesystem,character_set_system иcharacter_sets_dir, поскольку они не повлияют на искаженные символы.

SHOW VARIABLES LIKE 'collation\_%';Вы можете просмотреть текущие правила сортировки, используемые MySQL, с помощью команд.Команды и результаты выполнения следующие:

mysql> SHOW VARIABLES LIKE 'collation\_%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | gbk_chinese_ci    |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set, 1 warning (0.01 sec)

 Вышеуказанные результаты операции объясняются следующим образом:

  • collation_connection: правила сортировки, используемые при подключении к базе данных.
  • collation_database: правила сортировки, используемые при создании базы данных.
  • collation_server: правила сортировки, используемые сервером MySQL.


Правила и команды корректуры следующие:

  • Начинается с имени набора символов, соответствующего правилу сопоставления.
  • Центрируйте название страны (или центрируйте его по центру).
  • Оканчиваясь на ci, cs или bin, ci означает нечувствительность к регистру, cs означает чувствительность к регистру, а bin означает сравнение по двоично-кодированному значению.

Процесс преобразования набора символов MySQL

Процесс преобразования наборов символов в MySQL выглядит следующим образом:

1) При выполнении команд MySQL или операторов sql в окне командной строки (командной строке cmd) эти команды или операторы преобразуются из «набора символов окна командной строки» в те, которые определяется набором символов «character_set_client».

2) После успешного подключения к серверу MySQL с помощью окна командной строки устанавливается «канал передачи данных». Команды MySQL или операторы sql передаются на сервер MySQL по «каналу передачи данных», а набор символов, определенный символом_set_client, преобразован вcharacter_set_connection Определенный набор символов.

3) После того, как экземпляр службы MySQL получает команду MySQL или оператор sql по каналу передачи данных, он преобразует команду MySQL или оператор sql из набора символов, определенного символом_set_connection, в набор символов, определенный символом_set_server.

4) Если команда MySQL или оператор sql работает с определенной базой данных, преобразуйте команду MySQL или оператор sql из набора символов, определенного символом_set_server, в набор символов, определенный символом_set_database.

5) После выполнения команды MySQL или оператора sql результат выполнения устанавливается в набор символов, определенный вcharacter_set_results.

6) Результаты выполнения возвращаются по исходному пути открытого канала передачи данных, и результаты выполнения преобразуются из набора символов, определенного символом_set_results, в набор символов, определенный символом_set_client, и, наконец, преобразуются в набор символов окна командной строки и отображается в окне командной строки. .

 

Базовые навыки работы с базами данных Mysql, полная практика icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210

Набор символов просмотра MySQL и правила сопоставления

В разделе « Подробное объяснение набора символов и правил сопоставления MySQL » мы узнали о наборе символов MySQL и правилах сопоставления. В этом разделе в основном представлены несколько методов просмотра набора символов и правил сопоставления.

В MySQL процесс команды и выполнения для просмотра доступных наборов символов выглядит следующим образом: 

mysql> SHOW CHARACTER set;
+----------+---------------------------------+---------------------+--------+
| Charset  | Description                     | Default collation   | Maxlen |
+----------+---------------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese        | big5_chinese_ci     |      2 |
| dec8     | DEC West European               | dec8_swedish_ci     |      1 |
| cp850    | DOS West European               | cp850_general_ci    |      1 |
| hp8      | HP West European                | hp8_english_ci      |      1 |
| koi8r    | KOI8-R Relcom Russian           | koi8r_general_ci    |      1 |
| latin1   | cp1252 West European            | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European     | latin2_general_ci   |      1 |
| swe7     | 7bit Swedish                    | swe7_swedish_ci     |      1 |
| ascii    | US ASCII                        | ascii_general_ci    |      1 |
| ujis     | EUC-JP Japanese                 | ujis_japanese_ci    |      3 |
| sjis     | Shift-JIS Japanese              | sjis_japanese_ci    |      2 |
| hebrew   | ISO 8859-8 Hebrew               | hebrew_general_ci   |      1 |
| tis620   | TIS620 Thai                     | tis620_thai_ci      |      1 |
| euckr    | EUC-KR Korean                   | euckr_korean_ci     |      2 |
| koi8u    | KOI8-U Ukrainian                | koi8u_general_ci    |      1 |
| gb2312   | GB2312 Simplified Chinese       | gb2312_chinese_ci   |      2 |
| greek    | ISO 8859-7 Greek                | greek_general_ci    |      1 |
| cp1250   | Windows Central European        | cp1250_general_ci   |      1 |
| gbk      | GBK Simplified Chinese          | gbk_chinese_ci      |      2 |
| latin5   | ISO 8859-9 Turkish              | latin5_turkish_ci   |      1 |
| armscii8 | ARMSCII-8 Armenian              | armscii8_general_ci |      1 |
| utf8     | UTF-8 Unicode                   | utf8_general_ci     |      3 |
| ucs2     | UCS-2 Unicode                   | ucs2_general_ci     |      2 |
| cp866    | DOS Russian                     | cp866_general_ci    |      1 |
| keybcs2  | DOS Kamenicky Czech-Slovak      | keybcs2_general_ci  |      1 |
| macce    | Mac Central European            | macce_general_ci    |      1 |
| macroman | Mac West European               | macroman_general_ci |      1 |
| cp852    | DOS Central European            | cp852_general_ci    |      1 |
| latin7   | ISO 8859-13 Baltic              | latin7_general_ci   |      1 |
| utf8mb4  | UTF-8 Unicode                   | utf8mb4_general_ci  |      4 |
| cp1251   | Windows Cyrillic                | cp1251_general_ci   |      1 |
| utf16    | UTF-16 Unicode                  | utf16_general_ci    |      4 |
| utf16le  | UTF-16LE Unicode                | utf16le_general_ci  |      4 |
| cp1256   | Windows Arabic                  | cp1256_general_ci   |      1 |
| cp1257   | Windows Baltic                  | cp1257_general_ci   |      1 |
| utf32    | UTF-32 Unicode                  | utf32_general_ci    |      4 |
| binary   | Binary pseudo charset           | binary              |      1 |
| geostd8  | GEOSTD8 Georgian                | geostd8_general_ci  |      1 |
| cp932    | SJIS for Windows Japanese       | cp932_japanese_ci   |      2 |
| eucjpms  | UJIS for Windows Japanese       | eucjpms_japanese_ci |      3 |
| gb18030  | China National Standard GB18030 | gb18030_chinese_ci  |      4 |
+----------+---------------------------------+---------------------+--------+
41 rows in set (0.02 sec)

в:

  • Первый столбец (Charset) — это имя набора символов;
  • Второй столбец (Описание) представляет собой описание набора символов;
  • Третий столбец (Сопоставление по умолчанию) — это правило сопоставления по умолчанию для набора символов;
  • Четвертый столбец (Maxlen) указывает максимальное количество байтов, занимаемых символом в наборе символов.


Обычно используемые наборы символов следующие:

  • latin1 поддерживает западноевропейские символы, греческие символы и т. д.
  • gbk поддерживает упрощенные китайские иероглифы.
  • big5 поддерживает традиционные китайские иероглифы.
  • utf8 поддерживает символы практически всех стран.

Полная практика базовых навыков работы с базами данных MySQL icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210
Вы также можете проверить наборы символов, поддерживаемые MySQL, запросив записи в таблице information_schema.character_set. Инструкция SQL и процесс выполнения следующие:

mysql> SELECT * FROM information_schema.character_sets;
+--------------------+----------------------+---------------------------------+--------+
| CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | DESCRIPTION                     | MAXLEN |
+--------------------+----------------------+---------------------------------+--------+
| big5               | big5_chinese_ci      | Big5 Traditional Chinese        |      2 |
| dec8               | dec8_swedish_ci      | DEC West European               |      1 |
| cp850              | cp850_general_ci     | DOS West European               |      1 |
| hp8                | hp8_english_ci       | HP West European                |      1 |
......

Вы можете использовать  SHOW COLLATION LIKE '***';команды для просмотра правил сопоставления связанных наборов символов.

mysql> SHOW COLLATION LIKE 'gbk%';
+----------------+---------+----+---------+----------+---------+
| Collation      | Charset | Id | Default | Compiled | Sortlen |
+----------------+---------+----+---------+----------+---------+
| gbk_chinese_ci | gbk     | 28 | Yes     | Yes      |       1 |
| gbk_bin        | gbk     | 87 |         | Yes      |       1 |
+----------------+---------+----+---------+----------+---------+
2 rows in set (0.00 sec)

Приведенный выше результат выполнения представляет собой правило сопоставления, соответствующее набору символов GBK, среди которых gbk_chinese_ci является правилом сопоставления по умолчанию и не учитывает регистр. gbk_bin сравнивает значения на основе двоичных кодов и учитывает регистр.

Вы также можете просмотреть правила сортировки, доступные в MySQL, запросив записи в таблице Information_schema.COLLATIONS. Инструкция SQL и процесс выполнения следующие:

mysql> SELECT * FROM information_schema.COLLATIONS;
+--------------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME           | CHARACTER_SET_NAME | ID  | IS_DEFAULT | IS_COMPILED | SORTLEN |
+--------------------------+--------------------+-----+------------+-------------+---------+
| big5_chinese_ci          | big5               |   1 | Yes        | Yes         |       1 |
| big5_bin                 | big5               |  84 |            | Yes         |       1 |
| dec8_swedish_ci          | dec8               |   3 | Yes        | Yes         |       1 |
| dec8_bin                 | dec8               |  69 |            | Yes         |       1 |
| cp850_general_ci         | cp850              |   4 | Yes        | Yes         |       1 |
| cp850_bin                | cp850              |  80 |            | Yes         |       1 |
......
Пример 1

Укажите «A» и «a» для сравнения в соответствии с правилами сортировки gbk_chinese_ci и gbk_bin соответственно. Операторы SQL и результаты выполнения следующие:

mysql> SELECT CASE WHEN 'A' COLLATE gbk_chinese_ci = 'a' COLLATE gbk_chinese_ci then 1
    -> else 0 end;
+-------------------------------------------------------------------------------------+
| CASE WHEN 'A' COLLATE gbk_chinese_ci = 'a' COLLATE gbk_chinese_ci then 1
else 0 end |
+-------------------------------------------------------------------------------------+
|                                                                                   1 |
+-------------------------------------------------------------------------------------+
1 row in set (0.02 sec)

mysql> SELECT CASE WHEN 'A' COLLATE gbk_bin = 'a' COLLATE gbk_bin then 1
    -> else 0 end;
+-----------------------------------------------------------------------+
| CASE WHEN 'A' COLLATE gbk_bin = 'a' COLLATE gbk_bin then 1
else 0 end |
+-----------------------------------------------------------------------+
|                                                                     0 |
+-----------------------------------------------------------------------+
1 row in set (0.00 sec)

Поскольку правила сортировки gbk_chinese_ci игнорируют регистр, два «A» и «a» считаются одинаковыми. Правило сопоставления gbk_bin не игнорирует регистр, и два символа считаются разными.

В реальных приложениях мы должны заранее подтвердить, как приложение необходимо сортировать, учитывает ли оно регистр, а затем выбрать соответствующие правила корректуры.

Базовые навыки работы с базами данных Mysql, полная практика icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210

рекомендация

отblog.csdn.net/m0_37449634/article/details/135554392