Detaillierte Erklärung der Zeichensätze und Validierungsregeln in MySQL

Detaillierte Erklärung der Zeichensätze und Validierungsregeln in MySQL

1Mehrere gängige Zeichensätze

Zu den gängigsten Zeichensätzen in MySQL gehören der ASCII-Zeichensatz, der lateinische Zeichensatz, der GB2312-Zeichensatz, der GBK-Zeichensatz, der UTF8-Zeichensatz usw. Lassen Sie uns diese Zeichensätze kurz vorstellen:

ASCII-Zeichensatz

Dieser Zeichensatz verwendet 1 Byte zur Kodierung. Ein Byte hat 8 Bit und kann insgesamt 128 Zeichen speichern. Die spezifische Entsprechung ist wie folgt:

Lateinischer Zeichensatz

Der lateinische Zeichensatz kann insgesamt 256 Zeichen speichern. Verglichen mit dem ASCII-Code enthält er 128 in Westeuropa häufig verwendete Zeichen.

GB2312-Zeichensatz

Es umfasst chinesische Schriftzeichen, lateinische Schriftzeichen, griechische Schriftzeichen usw., wobei die chinesischen Schriftzeichen (6.763) den größten Anteil haben und es 638 weitere Textsymbole gibt. Außerdem ist es mit ASCII-Zeichen kompatibel. Bei der ASCII-Kodierung wird 1 Byte (also 128 Bit) verwendet, bei der Kodierung anderer Zeichen werden 2 Byte verwendet. Es ist klar, dass es sich um eine Methode zur Seitenlängenkodierung handelt.

GBK-Zeichensatz

Dieser Zeichensatz stellt eine Erweiterung des GB2312-Zeichensatzes dar. Er ist mit dem GB2312-Zeichensatz kompatibel und wird grundsätzlich mit zwei Bytes kodiert.

UTF8-Zeichensatz

Es wird normalerweise mit 1 bis 4 Bytes codiert. Je nach den verwendeten Bytes kann es auch in UTF8 und utf8mb4 unterteilt werden. mb4 bedeutet bis zu 4 Bytes. Im Allgemeinen verwendet UTF8 drei Bytes zur Codierung. Darüber hinaus gibt es utf16 und utf32. Utf16 verwendet 2 oder 4 Bytes zur Codierung eines Zeichens und utf32 verwendet 4 Bytes zur Codierung eines Zeichens.

Es ist zu beachten, dass einige Emoji-Ausdrücke mit utf8mb4 dargestellt werden müssen.

2 In MySQL unterstützte Zeichensätze

MySQL unterstützt viele Zeichensätze. Am Beispiel meines lokalen Zeichensatzes verwende ich den Befehl show charset, um die vom aktuellen Server unterstützten Zeichensätze anzuzeigen. Die Ergebnisse sind wie folgt:

[email protected]:(keine) 22:46:48>>Zeichensatz anzeigen;
+----------+-----------------+---------------------+---------+
| Zeichensatz | Beschreibung | Standardsortierung | Maxlen |
+----------+-----------------+---------------------+---------+
| big5 | Big5 Traditionelles Chinesisch | big5_chinese_ci | 2 |
| dec8 | DEZ Westeuropäisch | dec8_swedish_ci | 1 |
| cp850 | DOS Westeuropäisch | cp850_general_ci | 1 |
| hp8 | HP Westeuropäisch | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russisch | koi8r_general_ci | 1 |
| latin1 | cp1252 Westeuropäisch | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Mitteleuropäisch | latin2_general_ci | 1 |
| swe7 | 7-Bit Schwedisch | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| ujis | EUC-JP Japanisch | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanisch | sjis_japanese_ci | 2 |
| Hebräisch | ISO 8859-8 Hebräisch | hebrew_general_ci | 1 |
| tis620 | TIS620 Thailändisch | tis620_thai_ci | 1 |
| euckr | EUC-KR Koreanisch | euckr_korean_ci | 2 |
| koi8u | KOI8-U Ukrainisch | koi8u_general_ci | 1 |
| gb2312 | GB2312 Vereinfachtes Chinesisch | gb2312_chinese_ci | 2 |
| Griechisch | ISO 8859-7 Griechisch | greek_general_ci | 1 |
| cp1250 | Windows Mitteleuropäisch | cp1250_general_ci | 1 |
| gbk | GBK vereinfachtes Chinesisch | gbk_chinese_ci | 2 |
| latin5 | ISO 8859-9 Türkisch | latin5_turkish_ci | 1 |
| armscii8 | ARMSCII-8 Armenisch | armscii8_general_ci | 1 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| cp866 | DOS Russisch | cp866_general_ci | 1 |
| keybcs2 | DOS Kamenicky Tschechisch-Slowakisch | keybcs2_general_ci | 1 |
| macce | Mac Mitteleuropäisch | macce_general_ci | 1 |
| macroman | Mac Westeuropäisch | macroman_general_ci | 1 |
| cp852 | DOS Mitteleuropäisch | cp852_general_ci | 1 |
| latin7 | ISO 8859-13 Baltikum | latin7_general_ci | 1 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
| cp1251 | Windows-Kyrillisch | cp1251_general_ci | 1 |
| utf16 | UTF-16 Unicode | utf16_general_ci | 4 |
| cp1256 | Windows-Arabisch | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| utf32 | UTF-32 Unicode | utf32_general_ci | 4 |
| binär | Binärer Pseudozeichensatz | binär | 1 |
| geostd8 | GEOSTD8 Georgisch | geostd8_general_ci | 1 |
| cp932 | SJIS für Windows Japanisch | cp932_japanese_ci | 2 |
| eucjpms | UJIS für Windows Japanisch | eucjpms_japanese_ci | 3 |
+----------+-----------------+---------------------+---------+
39 Zeilen im Satz (0,00 Sek.)

Wie Sie sehen, werden insgesamt 39 Zeichensätze unterstützt. Natürlich variiert diese Zahl in verschiedenen Versionen. Von diesen 39 Zeichensätzen müssen wir uns vor allem die folgenden merken:

+----------+-----------------+---------------------+---------+
| Zeichensatz | Beschreibung | Standardsortierung | Maxlen |
+----------+-----------------+---------------------+---------+
| latin1 | cp1252 Westeuropäisch | latin1_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| gb2312 | GB2312 Vereinfachtes Chinesisch | gb2312_chinese_ci | 2 |
| gbk | GBK vereinfachtes Chinesisch | gbk_chinese_ci | 2 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
+----------+-----------------+---------------------+---------+

Hierfür müssen wir lediglich wissen, wie viele Bytes ihre maximale Länge umfasst.

3 Verifizierungsregeln

Die Validierungsregel eines Zeichensatzes bezieht sich auf das Kriterium, das beim Vergleichen der Größe eines Zeichensatzes verwendet wird. Wenn wir beispielsweise die Größe von a und B vergleichen und die Groß-/Kleinschreibung nicht berücksichtigen, dann gilt a<B. Wenn wir die Groß-/Kleinschreibung berücksichtigen, dann gilt a>B. Mit anderen Worten: Derselbe Zeichensatz, aber unterschiedliche Vergleichsregeln führen zu unterschiedlichen Sortierergebnissen für eine Datenspalte.

Die Zeichenvalidierungsregeln in MySQL können mit der Syntax „show collation;“ wie folgt angezeigt werden:

[email protected]:(keine) 23:00:36>>Sortierung anzeigen;
+-----------------------+----------+-----+---------+----------+----------+---------+
| Sortierung | Zeichensatz | ID | Standard | Kompiliert | Sortlen |
+-----------------------+----------+-----+---------+----------+----------+---------+
| big5_chinese_ci | big5 | 1 | Ja | Ja | 1 |
| big5_bin | big5 | 84 | | Ja | 1 |
| dec8_swedish_ci | dec8 | 3 | Ja | Ja | 1 |
| dec8_bin | dec8 | 69 | | Ja | 1 |
...........
| koi8r_general_ci | koi8r | 7 | Ja | Ja | 1 |
| koi8r_bin | koi8r | 74 | | Ja | 1 |
| latin1_german1_ci | latin1 | 5 | | Ja | 1 |
| koi8u_general_ci | koi8u | 22 | Ja | Ja | 1 |
| utf8_general_ci | utf8 | 33 | Ja | Ja | 1 |
| utf8_bin | utf8 | 83 | | Ja | 1 |
| utf8_unicode_ci | utf8 | 192 | | Ja | 8 |
| utf8_icelandic_ci | utf8 | 193 | | Ja | 8 |
| utf8_latvian_ci | utf8 | 194 | | Ja | 8 |
| utf8_romanian_ci | utf8 | 195 | | Ja | 8 |
| utf8_slovenian_ci | utf8 | 196 | | Ja | 8 |
| utf8_polish_ci | utf8 | 197 | | Ja | 8 |
| utf8_estonian_ci | utf8 | 198 | | Ja | 8 |
+-----------------------+----------+-----+---------+----------+----------+---------+
195 Zeilen im Satz (0,00 Sek.)

Wir können sehen, dass die Ergebnisse insgesamt 195 Vergleichsregeln enthalten. Jeder Zeichensatz enthält seine eigene Standardvalidierungsregel. Lassen Sie uns eine davon kurz erklären: utf8_polish_ci vergleicht auf der Grundlage von Polnisch. Diese Validierungsregel besteht aus drei Teilen. Der Name der Vergleichsregel beginnt mit dem Namen des damit verbundenen Zeichensatzes. utf8 bezieht sich auf die Vergleichsregel des utf8-Zeichensatzes, polish bezieht sich auf Polnisch und _ci bezieht sich auf die Groß-/Kleinschreibung.

Für das letzte Suffix können wir wie folgt zusammenfassen:

_ai ist akzentunabhängig

_as ist akzentsensitiv

_ci case insensitive (insensitive) nicht case-sensitiv

_cs Groß-/Kleinschreibung beachten (sensitiv) Groß-/Kleinschreibung beachten

_bin binär

In den obigen Ergebnissen können wir auch sehen, dass der Wert der Standardspalte einiger Validierungsregeln „Ja“ lautet, was bedeutet, dass diese Validierungsregel die Standardvalidierungsregel für den Zeichensatz ist.

4 Zeichensätze und Vergleichsregeln auf dem Server

MySQL bietet zwei Systemvariablen zur Darstellung des Zeichensatzes und der Vergleichsregeln auf Serverebene, eine ist character_set_sever und die andere ist collation_server. Wir können ihre Standardwerte anzeigen:

[email protected]:(keine) 23:12:28>>Variablen wie „character_set_server“ anzeigen;
+----------------------+----------+
| Variablenname | Wert |
+----------------------+----------+
| Zeichensatzserver | utf8 |
+----------------------+----------+
1 Zeile im Satz (0,00 Sek.)

[email protected]:(keine) 23:12:47>>Variablen wie „collation_server“ anzeigen;
+------------------+-----------------+
| Variablenname | Wert |
+------------------+-----------------+
| Sortierserver | utf8_general_ci |
+------------------+-----------------+
1 Zeile im Satz (0,00 Sek.)

[email protected]:(keine) 23:12:57>>

In MySQL sind Zeichensätze und Validierungsregeln in vier Ebenen unterteilt: Serverebene, Datenbankebene, Tabellenebene und Feldebene. Hier sehen wir sie anhand von Beispielen:

Datenbankebenemysql 23:23:48>>Datenbank erstellen yyz Zeichensatz UTF8 sortieren utf8_general_ci;
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)

Tabellenebene MySQL 23:24:23>>Tabelle yyz.yyz erstellen (Name varchar (10)) Zeichensatz gb2312 sortieren gb2312_chinese_ci;
Abfrage OK, 0 Zeilen betroffen (0,04 Sek.)

Feldebenemysql 23:27:06>>
[email protected]:(keine) 23:27:06>>Tabelle yyz.yyz ändern, Num varchar(10) hinzufügen, Zeichensatz gbk, gbk_chinese_ci sortieren;
Abfrage OK, 0 Zeilen betroffen (0,11 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0

Zeigen Sie die Ergebnisse anmysql 23:28:27>>show create table yyz.yyz;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Tabelle | Tabelle erstellen |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| yyz | TABELLE ERSTELLEN `yyz` (
 `name` varchar(10) DEFAULT NULL,
 `num` varchar(10) ZEICHENSATZ gbk STANDARD NULL
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 Zeile im Satz (0,00 Sek.)

Da der Zeichensatz und die Vergleichsregeln miteinander in Beziehung stehen, ändern sich die Vergleichsregeln, wenn wir nur den Zeichensatz ändern. Wenn wir nur die Vergleichsregeln ändern, ändert sich auch der Zeichensatz. Die spezifischen Regeln lauten wie folgt:

Wenn Sie nur den Zeichensatz ändern, werden die Vergleichsregeln zu den Standardvergleichsregeln des geänderten Zeichensatzes.
Wenn Sie nur die Vergleichsregel ändern, wird der Zeichensatz zu dem Zeichensatz, der der geänderten Vergleichsregel entspricht.

Es gibt noch 4 weitere Dinge, die Sie beachten sollten:

  • Wenn für die Datenbank in den Anweisungen zum Erstellen und Ändern der Datenbank kein fataler Zeichensatz und keine Vergleichsregeln vorhanden sind, werden der Zeichensatz und die Vergleichsregeln auf Serverebene als Zeichensatz und Vergleichsregeln der Datenbank verwendet.
  • Wenn für eine Tabelle der Zeichensatz und die Vergleichsregeln nicht in den Anweisungen zum Erstellen oder Ändern der Tabelle angegeben sind, werden der Zeichensatz und die Vergleichsregeln der Datenbank, in der sich die Tabelle befindet, als Zeichensatz und Vergleichsregeln der Tabelle verwendet.
  • Wenn für eine Spalte der Zeichensatz und die Vergleichsregeln nicht in den Erstellungs- und Änderungsanweisungen angegeben sind, werden der Zeichensatz und die Vergleichsregeln der Tabelle, in der sich die Spalte befindet, als Zeichensatz und Vergleichsregeln der Spalte verwendet.
  • Bei Spalten, in denen Zeichenfolgen gespeichert sind, können verschiedene Spalten in derselben Tabelle unterschiedliche Zeichensätze und Vergleichsregeln aufweisen.

Oben finden Sie eine ausführliche Erläuterung des Zeichensatzes und der Validierungsregeln in MySQL. Weitere Informationen zum Zeichensatz und den Validierungsregeln in MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Tutorial zum Anzeigen und Ändern von MySQL-Zeichensätzen
  • So ändern Sie den MySQL-Zeichensatz
  • Ursachen und Lösungen für das Problem des verstümmelten Zeichensatzes in der MySQL-Datenbank
  • So ändern Sie den MySQL-Zeichensatz utf8 in utf8mb4
  • So vereinheitlichen Sie den Zeichensatz einer vorhandenen MySQL-Datenbank
  • Verstümmelte Zeichen und Lösungen im MySQL-Zeichensatz
  • Detaillierte Erläuterung der JDBC-Verarbeitung des Mysql utf8mb4-Zeichensatzes
  • Lösung für Indexfehler in MySQL aufgrund unterschiedlicher Feldzeichensätze
  • So ändern Sie den Standardzeichensatz von MySQL auf dem MAC auf UTF-8
  • So legen Sie den Zeichensatz für MySQL unter Docker fest
  • So lösen Sie das Problem der Nichtübereinstimmung des MySQL-Abfragezeichensatzes

<<:  Ausführliche Erläuterung der verschiedenen Methoden sowie der Vor- und Nachteile der JavaScript-Vererbung

>>:  Was ist DNS-Prefetch? Frontend-Optimierung: DNS-Vorauflösung verbessert die Seitengeschwindigkeit

Artikel empfehlen

JS implementiert die Append-Funktion von jQuery

Inhaltsverzeichnis Zeig mir den Code Testen Sie d...

Analyse der Prinzipien und Verwendung von Linux-Hardlinks und Softlinks

Im Linux-System gibt es einen Dateityp namens Lin...

Detaillierte Erklärung der CSS-Zeilenhöhe und -Höhe

Als ich kürzlich an CSS-Schnittstellen arbeitete,...

So installieren und verwenden Sie Cockpit unter CentOS 8/RHEL 8

Cockpit ist ein webbasiertes Serververwaltungstoo...

Lernen Sie schnell die MySQL-Grundlagen

Inhaltsverzeichnis SQL verstehen SELECT verstehen...

So legen Sie die Position des Blockelements in der Mitte des Fensters fest

So legen Sie die Position des Blockelements in de...

Das WeChat-Applet zeichnet die Bewegungsbahn des Benutzers auf

Inhaltsverzeichnis Konfiguration hinzufügen JSON-...

MySQL-Benutzer und -Berechtigungen und Beispiele zum Knacken des Root-Passworts

MySQL-Benutzer und -Berechtigungen In MySQL gibt ...

So erstellen Sie PHP7 mit einem benutzerdefinierten Docker-Image

Führen Sie zunächst eine einfache Docker-Installa...

Detaillierte Beispiele für Variablen- und Funktionspromotion in JavaScript

js-Ausführung Phase der lexikalischen Analyse: um...