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

Zwei Möglichkeiten zur Visualisierung von ClickHouse-Daten mit Apache Superset

Apache Superset ist ein leistungsstarkes BI-Tool,...

Detaillierte Erklärung zur korrekten Öffnung in CSS

Warum sagen wir „normalerweise 1em=16px“? Die vom...

Häufige Szenarien und Vermeidungsmethoden für Indexfehler in MySQL

Vorwort Ich habe zuvor viele ähnliche Artikel gel...

js, um einen gleitenden Karusselleffekt zu erzielen

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

So können Sie lange Vue-Listen schnell laden

Inhaltsverzeichnis Hintergrund Hauptinhalt 1. Kom...

Umfassende Inventarisierung wichtiger Logdateien in MySQL

Inhaltsverzeichnis Einführung Protokollklassifizi...

mysql charset=utf8 verstehen Sie wirklich, was es bedeutet

1. Schauen wir uns zunächst eine Anweisung zur Ta...

CSS setzt die Höhe des Box-Containers (div) immer auf 100 %

Vorwort Manchmal muss die Höhe eines Box-Containe...

Häufige CSS-Fehler und Lösungen

Code kopieren Der Code lautet wie folgt: Untersch...

Einführung in berechnete Eigenschaften in Vue

Inhaltsverzeichnis 1. Was ist eine berechnete Eig...