Verwenden Sie in MySQL niemals utf8 und immer utf8mb4. Einführung in utf8mb4 In MySQL/MariaDB ist der UTF-8-Zeichensatz keine echte Implementierung von Unicode, d. h. es handelt sich nicht um eine echte UTF-8-Kodierung, da er Zeichen mit bis zu 3 Bytes unterstützt. Die UTF-8-Kodierung kann jedes Symbol im Unicode-Zeichensatz darstellen, von U+000000 bis U+10FFFF. Das sind 1.114.112 mögliche Symbole. (Nicht allen dieser Unicode-Codepunkte sind Zeichen zugewiesen, aber das hindert UTF-8 nicht daran, sie zu kodieren. Unicode ordnet Zeichen tatsächlich insgesamt 1.112.064 Codepunkten zu.) UTF-8 ist eine Kodierung mit variabler Breite; zur Kodierung jedes Symbols werden ein bis vier (8-Bit-)Bytes verwendet. Dies spart Platz zum Speichern von Low-Code-Werten. Und es kann alle Charaktere vollständig darstellen. UTF-8 ist wohl die beliebteste Kodierungsimplementierung von Unicode. Die echte UTF-8-Kodierung, die in MySQL/MariaDB implementiert ist, ist utf8mb4, die bis zu 4 Byte Speicher unterstützt.
Fehler bei überschrittener Byteanzahl bei UTF8 Wenn UTF-8 verwendet wird und 4-Byte-Zeichen wie Emoji gespeichert werden, wird normalerweise der Fehler Error: 1366 gemeldet:
utf8mb4-UnterstützungDas utf8mb4 in MySQL/MariaDB ist eine Ergänzung zum ursprünglichen utf8, das nur Zeichen mit einer Größe von 3 Byte speichern kann. Es ist eine echte UTF-8-Kodierung. Unterstützt seit MySQL 5.5.3+. Ab MySQL 8.0 wurde der Standardzeichensatz auf utf8mb4 geändert. Das heißt, wenn Sie MySQL 8.0 und höher verwenden, müssen Sie sich über das Problem der Bytelänge keine Gedanken machen. Die allgemein verwendeten Sortierregeln entsprechend utf8mb4 sind: utf8mb4_general_ci und utf8mb4_unicode_ci. Stellen Sie die Standardzeichenkodierung auf utf8mb4 und die entsprechenden Sortierregeln ein. Den aktuellen Code ansehenVerwenden Sie nach der Anmeldung bei MySQL/MariaDB SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';, um den Zeichensatz und die Sortierung anzuzeigen. Zeigen Sie den Zeichensatz an: MariaDB [(keine)]> Variablen wie „Charakter%“ anzeigen; +-----------------------------------------+------------------------------------------------+ | Variablenname | Wert | +-----------------------------------------+------------------------------------------------+ | Zeichensatzclient | gbk | | Zeichensatzverbindung | gbk | | Zeichensatzdatenbank | utf8 | | Zeichensatz_Dateisystem | Binär | | Zeichensatzergebnisse | gbk | | Zeichensatzserver | utf8 | | Zeichensatzsystem | utf8 | | character_sets_dir | C:\Programme\MariaDB 10.3n\share\charsets\ | +-----------------------------------------+------------------------------------------------+ 8 Zeilen im Satz (0,043 Sek.) Da es unter chinesischem Windows installiert wird, enthält es gbk. Ändern Sie die MySQL/Mariadb-Konfigurationsdatei und ändern Sie die UTF8-Kodierung in utf8mb4
my.cnf unter Linux: > vim /etc/meine.cnf # # Diese Gruppe wird sowohl vom Client als auch vom Server gelesen # verwenden Sie es für Optionen, die alles betreffen # [Client-Server] [mysqld] Zeichensatzserver = utf8mb4 init_connect = "Namen festlegen utf8mb4" Sortierserver = utf8mb4_unicode_ci Zeichensatz-Client-Handshake = FALSCH [Kunde] Standardzeichensatz = utf8mb4 [mysql] Standardzeichensatz = utf8mb4 # # alle Dateien aus dem Konfigurationsverzeichnis einbinden # !includedir /etc/my.cnf.d my.ini unter Windows: [mysqld] datadir=C:/Programme/MariaDB 10.3n/data Port = 3306 Zeichensatzserver = utf8mb4 # Die Verwendung des eindeutigen Optionspräfixes „character_set_client“ ist fehleranfällig und kann in Zukunft zu Fehlern führen. Verwenden Sie stattdessen den vollständigen Namen „character-set-client-handshake“. Zeichensatz-Client-Handshake = utf8mb4 # Zeichensatzclient = utf8mb4 Sortierserver = utf8mb4_unicode_ci init_connect = "Namen festlegen utf8mb4" Zeichensatz-Client-Handshake überspringen = falsch Zeichensatzdateisystem = binär Kleinbuchstabentabellennamen = 2 [mysqldump] loose_character_set_client=utf8mb4 [mysql] Standardzeichensatz = utf8mb4 [Kunde] Port = 3306 plugin-dir=C:/Programme/MariaDB 10.3n/lib/plugin Standardzeichensatz = utf8mb4 Es werden verschiedene Einstellungspunkte beschrieben:
Die reinen und präzisen Einstellungen für den utf8mb4-Zeichensatz und die Sortierregeln lauten wie folgt und es sind nur 5 Einstellungen erforderlich: [Kunde] Standardzeichensatz = utf8mb4 [mysql] Standardzeichensatz = utf8mb4 [mysqld] Zeichensatz-Client-Handshake = FALSE Zeichensatzserver = utf8mb4 Sortierserver = utf8mb4_unicode_ci Starten Sie MySQL/MariaDB neuVerwenden Sie unter Linux „systemctl restart mariadb“ oder „systemctl restart mysqld“. Neustart (nicht Neuladen) muss verwendet werden. Der von früheren Versionen von MariaDB gestartete oder neu gestartete Dienst heißt mysqld (mysqld.service). systemctl startet mysqld neu Öffnen Sie in Windows „Dienste“, suchen Sie in den Diensten den entsprechenden Dienst von MariaDB oder MySQL, klicken Sie mit der rechten Maustaste darauf und starten Sie ihn neu. Überprüfen Sie den Zeichensatz und die Sortierung erneut Nachdem die obigen Änderungen nach dem Neustart wirksam werden, überprüfen Sie erneut, wie unten gezeigt, ist es utf8mb4 und utf8mb4_unicode_ci geworden. MariaDB [(keine)]> VARIABLEN ANZEIGEN, WO Variablenname WIE 'Zeichensatz%' ODER Variablenname WIE 'Sortier%'; +--------------------------+--------------------+ | Variablenname | Wert | +--------------------------+--------------------+ | Zeichensatzclient | utf8mb4 | | Zeichensatzverbindung | utf8mb4 | | Zeichensatzdatenbank | utf8mb4 | | Zeichensatz_Dateisystem | Binär | | Zeichensatzergebnisse | utf8mb4 | | Zeichensatzserver | utf8mb4 | | Zeichensatzsystem | utf8 | | Sortierverbindung | utf8mb4_unicode_ci | | Sortierdatenbank | utf8mb4_unicode_ci | | Sortierserver | utf8mb4_unicode_ci | +--------------------------+--------------------+ 10 Zeilen im Satz (0,008 Sek.) Erklärung zu „character_set_filesystem“ und „character_set_system“Anhand des oben dargestellten Zeichensatzes und der Sortierregeln können Sie erkennen, dass zwei Elemente nicht utf8mb4 sind.
Weitere Referenzen zu Zeichensatzeinstellungen Die obigen Einstellungen sind bereits die richtigen, um utf8mb4 zu ändern. Nachfolgend sind einige mögliche zugehörige Einstellungen als Referenz aufgeführt (obwohl sie selten verwendet werden): [Kunde] Standardzeichensatz = utf8mb4 [mysql] Standardzeichensatz = utf8mb4 [mysqld] explicit_defaults_for_timestamp = 1 # Ich poste es hier als Tipp zum Deaktivieren der Zeitstempelnachricht, vielleicht hilft es jemandem :) Zeichensatz-Client-Handshake = 0 # FALSCH init_connect = 'SET Zeichensatzsystem = utf8mb4' init_connect = "SET Zeichensatzverbindung = utf8mb4" init_connect = 'SET Zeichensatzdatenbank = utf8mb4' init_connect = 'SET Zeichensatzergebnisse = utf8mb4' init_connect = 'SET-Sortierung_Datenbank = utf8mb4_unicode_ci' init_connect = 'SET-Sortierung_Verbindung = utf8mb4_unicode_ci' init_connect = "Namen festlegen utf8mb4" Zeichensatzserver = utf8mb4 #Zeichensatzclient = utf8mb4 Sortierserver = utf8mb4_unicode_ci Sortierverbindung = utf8mb4_unicode_ci Sortierdatenbank = utf8mb4_unicode_ci Mehrere init_connects können auch wie folgt festgelegt werden: init_connect = 'SET collation_connection = utf8mb4_unicode_ci,NAMES utf8mb4'. Nicht verifiziert Der komplette Vorgang der Umstellung des Zeichensatzes einer bestehenden Datenbank auf utf8mb4 Wenn die Datenbank mit utf8mb4 erstellt wird, gibt es solche Probleme nicht! ! ! Schritt 1: Erstellen Sie eine Sicherungskopie aller Datenbanken auf dem zu aktualisierenden Server. Sicherheit geht vor! Schritt 2: MySQL-Server aktualisieren. MySQL-Server auf v5.5.3+ aktualisieren. Wenn MySQL auf 8.0 aktualisiert wird, muss der MySQL-Serverzeichensatz in Schritt 5 nicht geändert werden. Der Standard ist utf8mb4. MariaDB muss auch den Zeichensatz ändern. Schritt 3: Datenbank, Tabellen und Spalten ändern. Ändern Sie den Zeichensatz und die Sortiereigenschaften der Datenbank, Tabellen und Spalten, um utf8mb4 zu verwenden. # Für jede Datenbank: ALTER DATABASE Datenbankname CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; # Für jede Tabelle: ALTER TABLE Tabellenname IN ZEICHENSATZ KONVERTIEREN utf8mb4 COLLATE utf8mb4_unicode_ci; # Für jede Spalte: ALTER TABLE Tabellenname CHANGE Spaltenname Spaltenname VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # (Nicht blind kopieren und einfügen! Die genaue Anweisung hängt vom Spaltentyp, der maximalen Länge und anderen Eigenschaften ab. Die obige Zeile ist nur ein Beispiel für eine `VARCHAR`-Spalte.) # Oder Modefy-Anweisung ALTER TABLE Tabellenname MODIFY Spaltenname VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; Schritt 4: Überprüfen der maximalen Länge von Spalten- und Indexschlüsseln Dies ist wahrscheinlich der mühsamste Teil des gesamten Upgrade-Prozesses. Bei der Konvertierung von UTF8 nach UTF8MB4 bleibt die maximale Länge einer Spalte oder eines Indexschlüssels in Bytes unverändert. Es fällt daher zeichenmäßig kleiner aus, da die maximale Länge eines Zeichens nun vier Bytes beträgt statt drei. Beispielsweise kann eine TINYTEXT-Spalte bis zu 255 Bytes enthalten, was 85 Drei-Byte-Zeichen oder 63 Vier-Byte-Zeichen entspricht. Angenommen, Sie haben eine TINYTEXT-Spalte, die UTF-8 verwendet, aber mehr als 63 Zeichen enthalten können muss. Aufgrund dieser Anforderung können Sie diese Spalte nicht in utf8mb4 konvertieren, es sei denn, Sie ändern auch den Datentyp in einen längeren Typ wie beispielsweise TEXT. Denn wenn Sie versuchen, sie mit 4-Byte-Zeichen zu füllen, können Sie nur 63 Zeichen eingeben und nicht mehr. Schritt 5: Ändern der Verbindungs-, Client- und Server-Zeichensätze Stellen Sie in Ihrem Anwendungscode den Verbindungszeichensatz auf utf8mb4 ein. Dies kann durch einfaches Ersetzen von SET NAMES utf8 durch SET NAMES utf8mb4 erfolgen. Gleichzeitig müssen auch die Sortierregeln entsprechend angepasst werden, zum Beispiel wird aus SET NAMES utf8 COLLATE utf8_unicode_ci SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci. Stellen Sie sicher, dass Sie sowohl den Client- als auch den Server-Zeichensatz festlegen. Die MySQL-Konfigurationsdatei (/etc/my.cnf) enthält Folgendes: [Kunde] Standardzeichensatz = utf8mb4 [mysql] Standardzeichensatz = utf8mb4 [mysqld] Zeichensatz-Client-Handshake = FALSE Zeichensatzserver = utf8mb4 Sortierserver = utf8mb4_unicode_ci Schritt 6: Reparieren und optimieren Sie alle Tabellen # Für jede Tabelle REPARATURTABELLE Tabellenname; TABELLE OPTIMIEREN Tabellenname; Dies lässt sich ganz einfach in einem Durchgang mit dem Befehlszeilenprogramm mysqlcheck erledigen: $ mysqlcheck -u root -p --auto-repair --optimize --all-databases Daraufhin wird das Kennwort des Root-Benutzers abgefragt. Anschließend werden alle Tabellen in allen Datenbanken repariert und optimiert. sieheDie Hauptreferenz wurde übersetzt von: So unterstützen Sie vollständiges Unicode in MySQL-Datenbanken. Lesen Sie gerne den Originaltext. Dies ist das Ende dieses Artikels zur vollständigen Unicode-Unterstützung in MySQL/MariaDB. Weitere Informationen zur Unicode-Unterstützung von MySQL/MariaDB finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder in Zukunft 123WORDPRESS.COM unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Mehrere Möglichkeiten zur Implementierung bildadaptiver Container mit CSS (Zusammenfassung)
>>: Lösung für die leere Seite nach einem vue.js-gepackten Projekt
Der Dienst des Unternehmens verwendet Docker und ...
Die MySQL-Funktionen DATE_ADD(date,INTERVAL expr ...
Es gibt zwei Möglichkeiten, nodejs unter Linux zu...
Voraussetzung: Mac, zsh installiert, mysql herunt...
Anwendungsszenario In vielen Fällen installieren ...
Inhaltsverzeichnis 1. Anwendungslebenszyklus 2. S...
Standardmäßig erfolgt das Lesen und Schreiben von...
Inhaltsverzeichnis Überblick Build-Prozess Verwan...
Nginx (Engine x) ist ein leistungsstarker HTTP- u...
1. Einführung in Apache Bench ApacheBench ist ein...
Die Konfiguration ist sehr einfach, aber ich muss...
Inhaltsverzeichnis 1. Komponenten mit Funktionen ...
Inhaltsverzeichnis Vorwort Installation und Verwe...
Ich habe kürzlich Django bereitgestellt und wollt...
Unterabfrageklassifizierung Klassifizierung nach ...