Ausführliche Erläuterung des MySQL-Zeichensatzes und der Sortierregeln sowie des MySQL-Ansichtszeichensatzes und der Sortierregeln

Detaillierte Erläuterung des MySQL-Zeichensatzes und der Sortierregeln

Bevor wir Zeichensätze und Korrekturleseregeln erklären, werfen wir einen kurzen Blick auf Zeichen, Zeichensätze und Zeichenkodierungen.

Zeichen (Character) ist die Sammelbezeichnung für Buchstaben, Zahlen und Symbole in Computern. Ein Zeichen kann ein chinesisches Schriftzeichen, ein englischer Buchstabe, eine arabische Ziffer, ein Satzzeichen usw. sein.

Computer speichern Daten in binärer Form. Die Zahlen, Englisch, Satzzeichen, chinesischen Schriftzeichen und andere Zeichen, die wir normalerweise auf dem Display sehen, sind das Ergebnis der Binärzahlenkonvertierung.

Der Zeichensatz (Zeichensatz) definiert die Entsprechung zwischen Zeichen und Binärzeichen und weist den Zeichen eindeutige Nummern zu. Zu den gängigen Zeichensätzen gehören ASCII, GBK, IOS-8859-1 usw.

Die Zeichenkodierung (Zeichenkodierung) kann auch als Zeichensatzcode bezeichnet werden, der angibt, wie Zeichennummern im Computer gespeichert werden.

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

 Kollationsregeln können auch als Kollationsregeln bezeichnet werden, die sich auf Vergleichsregeln zwischen Zeichen im gleichen Zeichensatz beziehen. Es besteht eine Eins-zu-viele-Beziehung zwischen Zeichensätzen und Sortierregeln, und jeder Zeichensatz verfügt über eine Standard-Sortierungsregel. Zeichensätze und Sortierregeln ergänzen einander und sind voneinander abhängig.

Einfach ausgedrückt werden Zeichensätze verwendet, um zu definieren, wie MySQL Zeichenfolgen speichert, und Sortierregeln werden verwendet, um zu definieren, wie MySQL Zeichenfolgen vergleicht.

Freunde, die mehr über die Zeichensätze ASCII, GB2312, GBK und Unicode erfahren möchten, können zum Lesen und Lernen auf den folgenden Link klicken:

Einige Datenbanken unterscheiden nicht klar zwischen Zeichensätzen und Sortierregeln. Wenn Sie beispielsweise eine Datenbank in SQL Server erstellen, entspricht die Auswahl eines Zeichensatzes der Auswahl eines Zeichensatzes und von Sortierregeln.

In MySQL sind der Zeichensatz und die Sortierregeln getrennt, und der Zeichensatz und die Sortierregeln müssen festgelegt werden. Unter normalen Umständen gibt es keine besonderen Anforderungen. Legen Sie einfach eine davon fest. Wenn nur der Zeichensatz festgelegt ist, setzt MySQL die Sortierregeln auf die entsprechenden Standard-Sortierungsregeln im Zeichensatz.

Dachang Senior Database Engineer MySQL-Datenbank-Praxistraining icon-default.png?t=N7T8https://edu.csdn.net/course/detail/39021

Sie könnenSHOW VARIABLES LIKE 'character%';den derzeit von MySQL verwendeten Zeichensatz über den Befehl überprüfen. Der Befehl und die Ausführungsergebnisse lauten wie folgt:

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)

 Die oben genannten Laufergebnisse werden in der folgenden Tabelle erläutert:

Name veranschaulichen
charakter_set_client Vom MySQL-Client verwendeter Zeichensatz
Zeichensatz_Verbindung Zeichensatz, der beim Herstellen einer Verbindung zur Datenbank verwendet wird
charakter_satz_datenbank Erstellen Sie den von der Datenbank verwendeten Zeichensatz
charakter_set_dateisystem Der vom MySQL-Serverdateisystem verwendete Zeichensatz. Der Standardwert ist binär ohne Konvertierung.
Character_set_results Der von der Datenbank verwendete Zeichensatz, wenn sie Daten an den Client zurückgibt
Zeichensatz_Server Es wird empfohlen, den vom MySQL-Server verwendeten Zeichensatz vom System selbst zu verwalten und nicht manuell zu definieren.
charakter_set_system Der vom Datenbanksystem verwendete Zeichensatz. Der Standardwert ist utf8 und muss nicht festgelegt werden.
charakter_sets_verzeichnis Installationsverzeichnis des Zeichensatzes

Wenn verstümmelte Zeichen auftreten, müssen Sie sich nicht um die drei Systemvariablen „character_set_filesystem“, „character_set_system“ und „character_sets_dir“ kümmern, da sie keinen Einfluss auf die verstümmelten Zeichen haben.

SHOW VARIABLES LIKE 'collation\_%';Sie können die aktuellen von MySQL verwendeten Sortierregeln über Befehle anzeigen. Die Befehle und Ausführungsergebnisse lauten wie folgt:

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)

 Die obigen Operationsergebnisse werden wie folgt erklärt:

  • collation_connection: Sortierregeln, die beim Herstellen einer Verbindung zur Datenbank verwendet werden
  • collation_database: Sortierregeln, die beim Erstellen der Datenbank verwendet werden
  • collation_server: Vom MySQL-Server verwendete Sortierregeln


Die Korrekturleseregeln und -befehle lauten wie folgt:

  • Beginnt mit dem Zeichensatznamen, der der Sortierregel entspricht
  • Zentrieren Sie den Ländernamen (oder zentrieren Sie ihn mit „Allgemein“).
  • Wenn es mit ci, cs oder bin endet, bedeutet ci, dass die Groß-/Kleinschreibung nicht beachtet werden soll, cs bedeutet, dass die Groß-/Kleinschreibung beachtet werden soll, und bin bedeutet, dass ein Vergleich anhand eines binär codierten Werts erfolgt.

Konvertierungsprozess für MySQL-Zeichensätze

Der Konvertierungsprozess von Zeichensätzen in MySQL ist wie folgt:

1) Beim Ausführen von MySQL-Befehlen oder SQL-Anweisungen im Eingabeaufforderungsfenster (cmd-Befehlszeile) werden diese Befehle oder Anweisungen vom „Zeichensatz des Eingabeaufforderungsfensters“ in Einsen konvertiert definiert durch den Zeichensatz „character_set_client“.

2) Nach erfolgreicher Verbindung mit dem MySQL-Server über das Eingabeaufforderungsfenster wird eine „Datenkommunikationsverbindung“ hergestellt. MySQL-Befehle oder SQL-Anweisungen werden über die „Datenverbindung“ an den MySQL-Server übertragen und der durch charakter_set_client definierte Zeichensatz ist konvertiert in „character_set_connection“ Definierter Zeichensatz.

3) Nachdem die MySQL-Dienstinstanz den MySQL-Befehl oder die SQL-Anweisung in der Datenkommunikationsverbindung empfangen hat, konvertiert sie den MySQL-Befehl oder die SQL-Anweisung aus dem durch Character_set_connection definierten Zeichensatz in den durch Character_set_server definierten Zeichensatz.

4) Wenn der MySQL-Befehl oder die SQL-Anweisung auf einer bestimmten Datenbank ausgeführt wird, konvertieren Sie den MySQL-Befehl oder die SQL-Anweisung von dem durch „character_set_server“ definierten Zeichensatz in den durch „character_set_database“ definierten Zeichensatz.

5) Nachdem der MySQL-Befehl oder die SQL-Anweisung ausgeführt wurde, wird das Ausführungsergebnis auf den durch Character_set_results definierten Zeichensatz gesetzt.

6) Die Ausführungsergebnisse werden entlang des ursprünglichen Pfads der offenen Datenkommunikationsverbindung zurückgegeben, und die Ausführungsergebnisse werden vom durch Character_set_results definierten Zeichensatz in den durch Character_set_client definierten Zeichensatz konvertiert und schließlich in den Zeichensatz des Eingabeaufforderungsfensters konvertiert wird im Eingabeaufforderungsfenster angezeigt. .

 

Grundkenntnisse der MySQL-Datenbank, vollständige Übung icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210

Zeichensatz- und Sortierregeln für die MySQL-Ansicht

Im Abschnitt „ Detaillierte Erläuterung des MySQL-Zeichensatzes und der Sortierregeln “ haben wir den MySQL-Zeichensatz und die Sortierregeln kennengelernt. In diesem Abschnitt werden hauptsächlich verschiedene Methoden zum Anzeigen des Zeichensatzes und der Sortierregeln vorgestellt.

In MySQL sind der Befehls- und Ausführungsprozess zum Anzeigen der verfügbaren Zeichensätze wie folgt: 

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)

In:

  • Die erste Spalte (Charset) ist der Zeichensatzname;
  • Die zweite Spalte (Beschreibung) ist die Beschreibung des Zeichensatzes;
  • Die dritte Spalte (Standardsortierung) ist die Standardsortierungsregel des Zeichensatzes;
  • Die vierte Spalte (Maxlen) gibt die maximale Anzahl an Bytes an, die ein Zeichen im Zeichensatz belegt.


Häufig verwendete Zeichensätze sind wie folgt:

  • latin1 unterstützt westeuropäische Zeichen, griechische Zeichen usw.
  • gbk unterstützt vereinfachte chinesische Schriftzeichen.
  • big5 unterstützt traditionelle chinesische Schriftzeichen.
  • utf8 unterstützt Zeichen aus fast allen Ländern.

Grundkenntnisse der MySQL-Datenbank, vollständige Übung icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210
Sie können die von MySQL unterstützten Zeichensätze auch überprüfen, indem Sie die Datensätze in der Tabelle information_schema.character_set abfragen. Die SQL-Anweisung und der Ausführungsprozess sind wie folgt:

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

Sie können  SHOW COLLATION LIKE '***';Befehle verwenden, um die Sortierregeln verwandter Zeichensätze anzuzeigen.

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)

Das obige Laufergebnis ist die Sortierregel, die dem GBK-Zeichensatz entspricht, wobei gbk_chinese_ci die Standard-Sortierungsregel ist und die Groß-/Kleinschreibung nicht beachtet wird. gbk_bin vergleicht basierend auf binär codierten Werten und unterscheidet zwischen Groß- und Kleinschreibung.

Sie können die in MySQL verfügbaren Sortierregeln auch anzeigen, indem Sie die Datensätze in der Tabelle information_schema.COLLATIONS abfragen. Die SQL-Anweisung und der Ausführungsprozess sind wie folgt:

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 |
......
Beispiel 1

Geben Sie „A“ und „a“ zum Vergleich gemäß den Sortierregeln gbk_chinese_ci bzw. gbk_bin an. Die SQL-Anweisungen und Ausführungsergebnisse lauten wie folgt:

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)

Da die Sortierregeln von gbk_chinese_ci die Groß-/Kleinschreibung ignorieren, werden die beiden „A“ und „a“ als gleich betrachtet. Die Sortierregel gbk_bin ignoriert die Groß-/Kleinschreibung nicht und die beiden Zeichen werden als unterschiedlich betrachtet.

Bei tatsächlichen Bewerbungen sollten wir vorab bestätigen, wie die Bewerbung sortiert werden muss, ob die Groß-/Kleinschreibung beachtet wird, und dann die entsprechenden Korrekturleseregeln auswählen.

Grundkenntnisse der MySQL-Datenbank, vollständige Übung icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210

Ich denke du magst

Origin blog.csdn.net/m0_37449634/article/details/135554392
Empfohlen
Rangfolge