Detaillierte Erklärung der MySQL/Java-Server-Unterstützung für Emoji und Problemlösung

Detaillierte Erklärung der MySQL/Java-Server-Unterstützung für Emoji und Problemlösung

Dieser Artikel beschreibt die Support- und Problemlösungsmethoden des MySQL Java-Servers für Emoji. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

Problembeschreibung

Die von der untersten Ebene erfassten Microblog-Daten werden in MySQL gespeichert. Einige Daten können nicht gespeichert werden. Nach der Überprüfung von Tomcat lauten die Kernfehlerinformationen wie folgt:

//Wirf eine Ausnahme, wenn der Zeichensatz nicht unterstützt wird.
sql.SQLException: Falscher Zeichenfolgenwert: '\xF0\x9F\x98\x97\xF0\x9F...' für Spalte 'CONTENT' in Zeile 1

Ursachenanalyse

  • Vor MySQL 5.5 unterstützt die UTF-8-Kodierung nur 1 bis 3 Bytes, also den Unicode-Kodierungsbereich des BMP-Teils (im Wesentlichen der Bereich 0000 bis FFFF).
  • Emoji-Ausdrücke sind 4 Bytes groß und die UTF-8-Kodierung von MySQL beträgt höchstens 3 Bytes, sodass die Daten nicht eingefügt werden können
  • Nach 5.5 hat MySQL die UTF8MB4-Kodierung hinzugefügt, die 4 Bytes unterstützen kann, d. h. ein Zeichen kann maximal 4 Zeichen haben, sodass die UTF8MB4-Kodierung mehr Zeichensätze unterstützen kann.
  • Wenn das Projekt Benutzertexte für mobile Produkte speichern möchte, muss der DB-Zeichensatz von herkömmlichen Zeichensätzen wie UTF8/GBK auf utf8mb4 aktualisiert werden.

【Notiz】

  • utf8mb4 ist mit utf8 kompatibel und kann mehr Zeichen darstellen als utf8. Daher müssen Sie sich beim Upgrade des DB-Zeichensatzes von herkömmlichen Zeichensätzen wie UTF8 oder GBK auf utf8mb4 keine Gedanken über Zeichenkompatibilitätsprobleme machen.

Problemumgehung

Spezielle Emoticons filtern

content = content.replaceAll("[\\x{10000}-\\x{10FFFF}]", ""); // Einfach und grob, nicht menschlich

Aktualisieren des Datenbankzeichensatzes

1. Die von utf8mb4 unterstützte MySQL-Version ist 5.5.3+. Wenn MySQL niedriger als diese Version ist, aktualisieren Sie es bitte zuerst.

2. Ändern Sie den Zeichensatz der Datenbank, der Tabelle und der Spalte

3. Ändern Sie die MySQL-Konfigurationsdatei my.cnf (my.ini für Windows). my.cnf befindet sich im Allgemeinen im Verzeichnis etc/mysql/. Nachdem Sie sie gefunden haben, fügen Sie den folgenden Inhalt in den folgenden drei Teilen hinzu:

[Client] Standardzeichensatz = utf8mb4

[mysql] Standardzeichensatz = utf8mb4

[mysqld]
Zeichensatz-Client-Handshake = FALSE
Zeichensatzserver = utf8mb4
Sortierserver = utf8mb4_unicode_ci
init_connect = "Namen festlegen utf8mb4"

4. Starten Sie MySQL neu und überprüfen Sie den Zeichensatz

Geben Sie in die MySQL-Befehlszeile ein:

VARIABLEN ANZEIGEN, WO Variablenname WIE 'Zeichensatz_%' ODER Variablenname WIE 'Sortier%';

Zeichensatz vor dem Neustart

Zeichensatz nach Neustart

【Notiz】

  • Die folgenden Felder müssen utf8mb4 sein
    • Zeichensatzclient
    • Zeichensatzverbindung
    • Zeichensatzdatenbank
    • Zeichensatzergebnisse
    • Zeichensatzserver

Nachdem Sie die obigen 4 Schritte abgeschlossen haben, verwenden Sie den MySQL-Client Navicat, um der Tabelle manuell Emoji-Ausdrücke ⛄ hinzuzufügen. Wenn sie erfolgreich gespeichert werden können, bedeutet dies, dass die Datenbank erfolgreich aktualisiert wurde.

Die genauen Unterschiede zwischen diesen Zeichensatzkonfigurationen finden Sie unter Ausführliche MySQL-Zeichensatzeinstellungen.

5. Überprüfen Sie die serverseitige DB-Konfigurationsdatei

// Die beim Konfigurieren von Spring verwendeten Links lauten wie folgt:
url="jdbc:mysql://localhost:3306/gzhou?allowMultiQueries=true&useUnicode=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&autoReconnectForPools=true&failOverReadOnly=false&maxReconnects=10"
// Wenn characterEncoding=utf8mb4, wird beim Einfügen von Daten eine Fehlermeldung angezeigt. Ursache: java.sql.SQLException: Nicht unterstützte Zeichenkodierung „utf8mb4“
//CharacterEncoding oder CharacterEncoding=utf8 entfernen

Emoji

Im Android-System verfügen die Eingabemethoden Sogou und Baidu über integrierte Emoji-Ausdrücke.

【Notiz】

Wenn die Emoji-Symbole zwischen den Systemen inkompatibel sind, werden nur Quadrate angezeigt.

Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen ansehen: „Zusammenfassung der allgemeinen MySQL-Funktionen“, „Zusammenfassung der Kenntnisse zu MySQL-Protokollvorgängen“, „Zusammenfassung der Kenntnisse zu MySQL-Transaktionsvorgängen“, „Zusammenfassung der Kenntnisse zu gespeicherten MySQL-Prozeduren“ und „Zusammenfassung der Kenntnisse zu MySQL-Datenbanksperren“.

Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist.

Das könnte Sie auch interessieren:
  • Einführung in die Verwendung des MySQL mysqladmin-Clients
  • Wie stellt MySQL eine Verbindung zum entsprechenden Clientprozess her?
  • Lösen Sie das Problem, dass der MySql-Client in Sekunden beendet wird (my.ini nicht gefunden).
  • Beispiel für die asynchrone MySQL-Client-Implementierung von PHP Swoole
  • Lösen Sie das Problem, dass der Node.js MySQL-Client das Authentifizierungsprotokoll nicht unterstützt
  • Lösung für das Problem, dass sich der mysql8.0.11-Client nicht anmelden kann
  • Erste Schritte mit der NodeJS-Serverentwicklung (Express+MySQL)
  • MySQL-Verbindungspool für App-Server (unterstützt hohe Parallelität)
  • Interpretieren von MySQL-Client- und Serverprotokollen

<<:  Methode der Toolbibliothek zur Generierung von Vue-Komponentendokumenten

>>:  So gehen Sie mit dem Problem um, dass die Datei gelöscht wird, der Speicherplatz in Linux jedoch nicht freigegeben wird

Artikel empfehlen

So implementieren Sie die @person-Funktion über Vue

Dieser Artikel verwendet Vue und fügt Mausklicker...

Detaillierte Erläuterung des Lazy Loading und Preloading von Webpack

Inhaltsverzeichnis Normale Belastung Lazy Loading...

MySQL-Inspektionsskript (unbedingt lesen)

Wie unten dargestellt: #!/usr/bin/env python3.5 p...

Benutzerdefinierte Tabbar-Komponente für das WeChat-Applet

In diesem Artikel wird der spezifische Code der b...

MySQL-Update-Fall Update-Feldwert ist keine feste Operation

Wenn bei der Verarbeitung von Batch-Updates besti...

Diskussion über Standard-Rand- und Füllwerte allgemeiner Elemente

Heute haben wir die Frage besprochen, wie hoch de...

React implementiert Endlosschleifen-Scrollinformationen

In diesem Artikel wird der spezifische Code von R...

So sichern Sie die MySQL-Datenbank regelmäßig automatisch

Wir alle wissen, dass Daten unbezahlbar sind. Wen...

Analyse der gemeinsamen Indexfunktion von MySQL und Anwendungsbeispiele

Dieser Artikel veranschaulicht anhand von Beispie...