1. InhaltsübersichtBei der Verwendung von MySQL ist es sehr wichtig, die Konzepte von Zeichensätzen und Zeichenfolgen sowie die Auswirkungen verschiedener Einstellungen auf die Datenspeicherung und den Datenvergleich zu verstehen. Das Problem „verstümmelte Zeichen“, mit dem viele Studenten bei ihrer täglichen Arbeit konfrontiert sind, ist höchstwahrscheinlich auf ein unzureichendes Verständnis der Zeichensätze und Zeichenfolgen sowie auf falsche Einstellungen zurückzuführen. Dieser Artikel stellt die folgenden Inhalte von den Grundlagen bis hin zu den komplexen Aspekten vor:
2. Konzepte und Zusammenhänge von Zeichensätzen und ZeichenreihenfolgenBeim Speichern von Daten bietet MySQL Unterstützung für verschiedene Zeichensätze. Beim Vergleichen von Daten wird die unterschiedliche Zeichenreihenfolge unterstützt. MySQL bietet Einstellungen auf verschiedenen Ebenen, einschließlich Serverebene, Datenbankebene, Tabellenebene und Spaltenebene, wodurch sehr präzise Einstellungen bereitgestellt werden können. Was sind Zeichensätze und Zeichenfolgen? Einfach ausgedrückt:
Zum Beispiel: Es gibt vier Zeichen: A, B, a, b. Die Codes dieser vier Zeichen sind jeweils A = 0, B = 1, a = 2, b = 3. Die Zeichen + Kodierung bilden hier den Zeichensatz. Was ist, wenn wir die Größe zweier Zeichen vergleichen möchten? Beispielsweise besteht der intuitivste Vergleichsweg für A und B oder a und b darin, ihre Kodierung zu verwenden, da beispielsweise 0 < 1 ist und somit A < B. Darüber hinaus sind wir der Meinung, dass Groß- und Kleinbuchstaben für A und a gleich sein sollten, obwohl sie unterschiedliche Kodierungen haben, d. h. A == a. Oben wurden zwei Vergleichsregeln definiert und die Menge dieser Vergleichsregeln stellt die Sortierung dar.
3. Von MySQL unterstützte Zeichensätze und ZeichenfolgenMySQL unterstützt mehrere Zeichensätze und Zeichenfolgen.
Das Obige ist ziemlich abstrakt. Schauen wir uns die nächsten Abschnitte an, um zu verstehen, was hier vor sich geht. 1. Unterstützte Zeichensätze anzeigen Sie können die von MySQL unterstützten Zeichensätze auf folgende Arten anzeigen. Methode 1: mysql> Zeichensatz anzeigen; +----------+-----------------+---------------------+---------+ | Zeichensatz | Beschreibung | Standardsortierung | Maxlen | +----------+-----------------+---------------------+---------+ | big5 | Big5 Traditionelles Chinesisch | big5_chinese_ci | 2 | | dec8 | DEZ Westeuropäisch | dec8_swedish_ci | 1 | ...ausgelassen Methode 2: mysql> verwende Informationsschema; mysql> wähle * aus CHARACTER_SETS; +--------------------+----------------------+-----------------------------+--------+ | CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | BESCHREIBUNG | MAXLEN | +--------------------+----------------------+-----------------------------+--------+ | big5 | big5_chinese_ci | Big5 Traditionelles Chinesisch | 2 | | dec8 | dec8_swedish_ci | DEZ Westeuropäisch | 1 | ...ausgelassen Wenn Sie zum Anzeigen „SHOW CHARACTER SET“ verwenden, können Sie auch WHERE- oder LIKE-Einschränkungen hinzufügen. Beispiel 1: Verwenden der WHERE-Bedingung. mysql> Zeichensatz anzeigen, wobei Charset="utf8"; +---------+--------------+----------------------+--------+ | Zeichensatz | Beschreibung | Standardsortierung | Maxlen | +---------+--------------+----------------------+--------+ | utf8 | UTF-8 Unicode | utf8_general_ci | 3 | +---------+--------------+----------------------+--------+ 1 Zeile im Satz (0,00 Sek.) Beispiel 2: Verwenden Sie die LIKE-Bedingung. mysql> ZEIGE ZEICHENSATZ WIE „utf8%“; +---------+------------------+--------------------+--------+ | Zeichensatz | Beschreibung | Standardsortierung | Maxlen | +---------+------------------+--------------------+--------+ | utf8 | UTF-8 Unicode | utf8_general_ci | 3 | | utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 | +---------+------------------+--------------------+--------+ 2 Zeilen im Satz (0,00 Sek.) 2. Sehen Sie sich die unterstützten Zeichenfolgen an Ebenso können Sie die von MySQL unterstützten Zeichenfolgen auf folgende Weise anzeigen. Methode 1: Anzeige über SHOW COLLATION. Wie Sie sehen, verfügt der UTF-8-Zeichensatz über mehr als 10 Zeichenfolgen. Überprüfen Sie, ob die Standardzeichenfolge verwendet wird, indem Sie prüfen, ob der Wert von „Standard“ „Ja“ lautet. mysql> SORTIMENT ANZEIGEN, WO Zeichensatz = "utf8"; +--------------------------+---------+-----+---------+----------+----------+---------+ | Sortierung | Zeichensatz | ID | Standard | Kompiliert | Sortlen | +--------------------------+---------+-----+---------+----------+----------+---------+ | utf8_general_ci | utf8 | 33 | Ja | Ja | 1 | | utf8_bin | utf8 | 83 | | Ja | 1 | ...leicht Methode 2: Abfrage information_schema.COLLATIONS. mysql> USE information_schema; mysql> SELECT * FROM COLLATIONS WHERE CHARACTER_SET_NAME="utf8"; +--------------------------+--------------------+-----+------------+-------------+---------+ | SORTIMENTNAME | ZEICHENSATZNAME | ID | IST_DEFAULT | IST_KOMPILIERT | SORTLEN | +--------------------------+--------------------+-----+------------+-------------+---------+ | utf8_general_ci | utf8 | 33 | Ja | Ja | 1 | | utf8_bin | utf8 | 83 | | Ja | 1 | | utf8_unicode_ci | utf8 | 192 | | Ja | 8 | 3. Namenskonventionen für Zeichenfolgen Die Zeichenfolgen werden mit ihrem entsprechenden Zeichensatz als Präfix benannt, wie unten gezeigt. Beispielsweise zeigt die Zeichenfolge utf8_general_ci an, dass es sich um die Zeichenfolge des Zeichensatzes utf8 handelt. Weitere Regeln finden Sie in der offiziellen Dokumentation. MariaDB [Informationsschema]> SELECT CHARACTER_SET_NAME, COLLATION_NAME FROM COLLATIONS WHERE CHARACTER_SET_NAME="utf8" Limit 2; +--------------------+-----------------+ | ZEICHENSATZNAME | SORTIMENTSNAME | +--------------------+-----------------+ | utf8 | utf8_general_ci | | utf8 | utf8_bin | +--------------------+-----------------+ 2 Zeilen im Satz (0,00 Sek.) 4. Server-Zeichensatz und ZeichenfolgeZweck: Wenn Sie eine Datenbank erstellen und keinen Zeichensatz oder keine Zeichenreihenfolge angeben, werden der Serverzeichensatz und die Serverzeichenreihenfolge als Standardzeichensatz und Sortierregel für die Datenbank verwendet. So geben Sie es an: Sie können es beim Starten des MySQL-Dienstes über Befehlszeilenparameter angeben. Es kann auch über Variablen in der Konfigurationsdatei angegeben werden. Standardzeichensatz und Zeichenreihenfolge des Servers: werden beim Kompilieren von MySQL durch Kompilierungsparameter angegeben. character_set_server und collation_server entsprechen jeweils dem Server-Zeichensatz und der Server-Zeichenfolge. 1. Überprüfen Sie den Server-Zeichensatz und die Zeichenfolge Sie entsprechen jeweils den Systemvariablen „character_set_server“ und „collation_server“. mysql> VARIABLEN WIE "character_set_server" ANZEIGEN; mysql> VARIABLEN WIE "collation_server" ANZEIGEN; 2. Geben Sie beim Starten des Dienstes an Sie können den Serverzeichensatz und die Zeichenfolge beim Starten des MySQL-Dienstes angeben. Wenn nicht angegeben, ist die Standardzeichenreihenfolge latin1, latin1_swedish_ci mysqld --character-set-server=latin1 \ --collation-server=latin1_swedish_ci Geben Sie den Serverzeichensatz separat an. In diesem Fall ist die Serverzeichenfolge die Standardzeichenfolge latin1, latin1_swedish_ci. mysqld --character-set-server=latin1 3. Spezifikation der Konfigurationsdatei Zusätzlich zur Angabe in den Befehlszeilenparametern können Sie es auch in der Konfigurationsdatei angeben, wie unten gezeigt. [Kunde] Standardzeichensatz = utf8 [mysql] Standardzeichensatz = utf8 [mysqld] Sortierserver = utf8_unicode_ci init-connect='Namen festlegen utf8' Zeichensatzserver = utf8 4. Laufzeitänderung Beispiel: Änderung zur Laufzeit (wird nach Neustart ungültig. Wenn Sie es nach dem Neustart unverändert lassen möchten, müssen Sie es in die Konfigurationsdatei schreiben) mysql> SET Zeichensatzserver = utf8; 5. Geben Sie beim Kompilieren den Standardzeichensatz und die Standardzeichenfolge an Die Standardwerte von character_set_server und collation_server können beim Kompilieren von MySQL über die Kompilierungsoptionen angegeben werden: cmake . -DDEFAULT_CHARSET=latin1 \ -DDEFAULT_COLLATION=latin1_german1_ci 5. Datenbankzeichensatz und ZeichenfolgeZweck: Festlegen des Zeichensatzes und der Zeichenfolge auf Datenbankebene. Datenbanken unter demselben MySQL-Dienst können unterschiedliche Zeichensätze/Zeichenfolgen angeben. 1. Stellen Sie den Zeichensatz/die Zeichenfolge der Daten ein Beim Erstellen oder Ändern einer Datenbank können Sie den Zeichensatz und die Sortierung der Datenbank über CHARACTER SET und COLLATE angeben. Erstellen Sie die Datenbank: CREATE DATABASE Datenbankname [[STANDARD] ZEICHENSATZ Zeichensatzname] [[DEFAULT] COLLATE Sortierungsname] Ändern Sie die Datenbank: ALTER DATABASE Datenbankname [[STANDARD] ZEICHENSATZ Zeichensatzname] [[DEFAULT] COLLATE Sortierungsname] Beispiel: Erstellen Sie ein Datenbank-Testschema und legen Sie den Zeichensatz auf utf8 fest. Die Standardsortierung ist utf8_general_ci. DATENBANK `test_schema` ERSTELLEN STANDARDZEICHENSATZ utf8; 2. Überprüfen Sie den Zeichensatz/die Zeichenfolge der Datenbank Es gibt drei Möglichkeiten, den Zeichensatz/die Zeichenreihenfolge der Datenbank anzuzeigen. Beispiel 1: Überprüfen Sie den Zeichensatz und die Sortierung von test_schema. (Die Standarddatenbank muss gewechselt werden) mysql> test_schema verwenden; Datenbank geändert mysql> AUSWÄHLEN @@Zeichensatzdatenbank, @@Sortierdatenbank; +--------------------------+----------------------+ | @@Zeichensatzdatenbank | @@Sortierdatenbank | +--------------------------+----------------------+ | utf8 | utf8_general_ci | +--------------------------+----------------------+ 1 Zeile im Satz (0,00 Sek.) Beispiel 2: Sie können auch den folgenden Befehl verwenden, um den Zeichensatz und die Datenbank von test_schema anzuzeigen (die Standarddatenbank muss nicht gewechselt werden). mysql> SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE schema_name="test_schema"; +-------------+----------------------------+------------------------+ | SCHEMANAME | STANDARDZEICHENSATZNAME | STANDARDSORTIMENTSAMMLUNGSNAME | +-------------+----------------------------+------------------------+ | Testschema | utf8 | utf8_general_ci | +-------------+----------------------------+------------------------+ 1 Zeile im Satz (0,00 Sek.) Beispiel 3: Sie können den Zeichensatz auch anzeigen, indem Sie die Anweisung zum Erstellen der Datenbank anzeigen. mysql> ANZEIGEN ERSTELLEN DATENBANK test_schema; +-------------+----------------------------------------------------------------------+ | Datenbank | Datenbank erstellen | +-------------+----------------------------------------------------------------------+ | test_schema | CREATE DATABASE `test_schema` /*!40100 STANDARDZEICHENSATZ utf8 */ | +-------------+----------------------------------------------------------------------+ 1 Zeile im Satz (0,00 Sek.) 3. Wie werden Datenbank-Zeichensätze und Zeichenfolgen bestimmt? Wenn beim Erstellen einer Datenbank CHARACTER SET oder COLLATE angegeben wird, gelten der entsprechende Zeichensatz und die entsprechende Sortierung. 6. Tabellenzeichensatz und ZeichenfolgeDie Syntax zum Erstellen und Ändern einer Tabelle lautet wie folgt. Der Zeichensatz und die Zeichenfolge können über CHARACTER SET und COLLATE festgelegt werden. TABELLE ERSTELLEN tbl_name (spaltenliste) [[STANDARD] ZEICHENSATZ Zeichensatzname] [COLLATE Sortierungsname]] ALTER TABLE Tabellenname [[STANDARD] ZEICHENSATZ Zeichensatzname] [COLLATE Sortierungsname] 1. Erstellen Sie eine Tabelle und geben Sie den Zeichensatz/die Zeichenfolge an Das folgende Beispiel gibt den Zeichensatz als utf8 und die Zeichenfolge als Standard an. CREATE TABLE `test_schema`.`test_table` ( `id` INT NICHT NULL KOMMENTAR '', PRIMÄRSCHLÜSSEL (`id`) KOMMENTAR '') STANDARDZEICHENSATZ = utf8; 2. Überprüfen Sie den Zeichensatz/die Zeichenfolge der Tabelle Ebenso gibt es drei Möglichkeiten, den Zeichensatz/die Zeichenreihenfolge einer Tabelle anzuzeigen. Methode 1: Verwenden Sie SHOW TABLE STATUS, um den Tabellenstatus anzuzeigen. Beachten Sie, dass die Sortierung utf8_general_ci und der entsprechende Zeichensatz utf8 ist. MariaDB [Blog]> TABELLENSTATUS AUS Testschema anzeigen \G; *************************** 1. Reihe *************************** Name: test_table Engine: InnoDB Version: 10 Zeilenformat: Kompakt Zeilen: 0 Durchschnittliche Zeilenlänge: 0 Datenlänge: 16384 Max_data_length: 0 Indexlänge: 0 Datenfrei: 11534336 Auto_increment: NULL Erstellungszeit: 2018-01-09 16:10:42 Update_time: NULL Check_time: NULL Sortierung: utf8_general_ci Prüfsumme: NULL Erstellungsoptionen: Kommentar: 1 Zeile im Satz (0,00 Sek.) Methode 2: Zeigen Sie die Informationen von information_schema.TABLES an. mysql> USE test_schema; mysql> SELECT TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_SCHEMA = "test_schema" AND TABLE_NAME = "test_table"; +-----------------+ | TABELLENSAMMLUNG | +-----------------+ |utf8_general_ci| +-----------------+ Methode 3: Bestätigen Sie mit SHOW CREATE TABLE. mysql> ANZEIGEN, TABELLE ERSTELLEN, test_table; +------------+----------------------------------------------------------------------------------------------------------------+ | Tabelle | Tabelle erstellen | +------------+----------------------------------------------------------------------------------------------------------------+ | test_table | CREATE TABLE `test_table` ( `id` int(11) NICHT NULL, PRIMÄRSCHLÜSSEL (`id`) ) ENGINE=InnoDB STANDARD-CHARSET=utf8 | +------------+----------------------------------------------------------------------------------------------------------------+ 1 Zeile im Satz (0,00 Sek.) 3. So bestimmen Sie den Tabellenzeichensatz und die Zeichenfolge Angenommen, die Werte von CHARACTER SET und COLLATE sind charset_name bzw. collation_name. Wenn Sie eine Tabelle erstellen: Wenn charset_name und collation_name angegeben sind, verwenden Sie sie. Wenn nur collation_name angegeben ist, aber charset_name nicht, verwendet die Zeichenfolge collation_name und der Zeichensatz den mit collation_name verknüpften Zeichensatz. Wenn charset_name und collation_name nicht angegeben sind, werden die Zeichensatz- und Sortierungseinstellungen der Datenbank verwendet. 7. Spaltenzeichensatz und SortierungFür Spalten vom Typ CHAR, VARCHAR oder TEXT können Sie einen Zeichensatz oder eine Zeichenfolge angeben. Die Syntax lautet wie folgt: Spaltenname {CHAR | VARCHAR | TEXT} (Spaltenlänge) [ZEICHENSATZ Zeichensatzname] [COLLATE Sortierungsname] 1. Fügen Sie eine neue Spalte hinzu und geben Sie den Zeichensatz/die Sortierregeln an Das Beispiel sieht wie folgt aus: (ähnlich wie beim Erstellen einer Tabelle) mysql> ALTER TABLE test_table ADD COLUMN char_column VARCHAR(25) CHARACTER SET utf8; 2. Überprüfen Sie den Zeichensatz/die Zeichenfolge der Spalte Hier sind einige Beispiele: mysql> SELECT CHARACTER_SET_NAME, COLLATION_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA="test_schema" AND TABLE_NAME="test_table" AND COLUMN_NAME="char_column"; +--------------------+-----------------+ | ZEICHENSATZNAME | SORTIMENTSNAME | +--------------------+-----------------+ | utf8 | utf8_general_ci | +--------------------+-----------------+ 1 Zeile im Satz (0,00 Sek.) 3. Bestimmen Sie den Spaltenzeichensatz/die Sortierregeln Angenommen, die Werte von CHARACTER SET und COLLATE sind charset_name bzw. collation_name: Wenn charset_name und collation_name beide eindeutig sind, basieren Zeichensatz und Zeichenreihenfolge auf charset_name und collation_name. Wenn nur charset_name angegeben ist und collation_name nicht angegeben ist, ist der Zeichensatz charset_name und die Zeichenfolge ist die Standardzeichenfolge von charset_name. Wenn nur collation_name angegeben ist und charset_name nicht, ist die Zeichenfolge collation_name und der Zeichensatz der mit collation_name verknüpfte Zeichensatz. Wenn charset_name und collation_name nicht angegeben sind, gelten der Zeichensatz und die Zeichenfolge der Tabelle. 8. Auswahl: Wann Zeichensatz und Zeichenfolge festgelegt werden sollenIm Allgemeinen kann es an drei Stellen konfiguriert werden: Wird beim Erstellen einer Datenbank konfiguriert. Der MySQL-Server wird beim Start konfiguriert. Wenn Sie MySQL aus dem Quellcode kompilieren, konfigurieren Sie es über Kompilierungsparameter 1. Methode 1: Konfigurieren beim Erstellen einer Datenbank Diese Methode ist flexibler und sicherer und ist nicht vom Standardzeichensatz/der Standardzeichenfolge abhängig. Beim Anlegen einer Datenbank legen Sie den Zeichensatz/die Zeichenreihenfolge fest. Beim späteren Anlegen von Tabellen und Spalten wird, sofern Sie nichts anderes angeben, der Zeichensatz/die Zeichenreihenfolge der entsprechenden Datenbank übernommen. DATENBANK ERSTELLEN mydb STANDARDZEICHENSATZ utf8 STANDARDSORTIMENT utf8_general_ci; 2. Methode 2: Konfigurieren Sie, wann der MySQL-Server startet Sie können die folgende Konfiguration hinzufügen, sodass beim Start des MySQL-Servers der Zeichensatzserver und der Sortierserver konfiguriert werden. Wenn Sie eine Datenbank/Tabelle/Spalte über den MySQL-Client erstellen und den Zeichensatz/die Zeichenreihenfolge nicht explizit deklarieren, wird der Zeichensatzserver/Sortierserver als Standardzeichensatz/-zeichenreihenfolge verwendet. Darüber hinaus muss der Zeichensatz/die Zeichenreihenfolge bei der Verbindung zwischen Client und Server noch über SET NAMES festgelegt werden. [mysqld] Zeichensatzserver = utf8 Sortierserver = utf8_general_ci 3. Methode 3: Wenn Sie MySQL aus dem Quellcode kompilieren, legen Sie es über die Kompilierungsparameter fest Wenn -DDEFAULT_CHARSET und -DDEFAULT_COLLATION während der Kompilierung angegeben werden, dann: Es wird beim Anlegen einer Datenbank oder Tabelle als Standardzeichensatz/-zeichenfolge verwendet. Wenn der Client eine Verbindung zum Server herstellt, verwendet er dies als Standardzeichensatz/-reihenfolge. (Namen müssen nicht separat festgelegt werden) Shell> cmake . -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci 9. Schreiben Sie am EndeIn diesem Artikel werden die Zeichensatz- und Zeichenfolgen-bezogenen Inhalte in MySQL ausführlich vorgestellt. Dieser Teil konzentriert sich hauptsächlich auf die Speicherung und den Vergleich von Daten. Tatsächlich gibt es noch einen sehr wichtigen Teil, der nicht behandelt wurde: die Zeichensatz- und Zeichenfolgeeinstellungen für die Verbindung. Es gibt auch viele verstümmelte Codeprobleme, die durch falsche Einstellungen des Verbindungszeichensatzes und der Zeichenreihenfolge verursacht werden. Dieser Teil muss ausführlich erläutert werden, daher wird er im nächsten Artikel erläutert. 10. Verwandte Links10.1 Zeichensatz-Unterstützung https://dev.mysql.com/doc/refman/5.7/en/charset.html Zusammenfassen Das Obige habe ich Ihnen vorgestellt. Ich hoffe, es wird Ihnen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken! Das könnte Sie auch interessieren:
|
<<: So verwenden Sie den Nginx-Proxy zum Surfen im Internet
>>: Tiefgreifendes Verständnis von Worker-Threads in Node.js
1. kein Aufhebens Führen Sie das Programm so aus,...
Vorwort Das einfache Verständnis von MySQL-Berech...
1. Centos7 unter VMware verbinden und eine feste ...
Inhaltsverzeichnis Vorwort: 1. Einführung in Navi...
CUDA-Installation, cuda herunterladen Geben Sie d...
Hintergrund: Da der Server das Flask-Projekt bere...
In HTML werden gängige URLs auf verschiedene Arten...
(I) Installation von mysql5.7: ❀ Details: Die Ins...
Inhaltsverzeichnis 1. Holen Sie sich einen zufäll...
In diesem Artikel wird der spezifische Prozess de...
In diesem Artikel wird der spezifische Code von j...
In diesem Artikel wird der spezifische Code von j...
1. Im Kreis herumlaufen Nach einigem Herumexperim...
Problembeschreibung: Der Inhalt der Datei 11 laut...
Unabhängig davon, ob Sie an Software oder Websites...