Was Sie haben, ist EXTRATERRESTRIAL ALIEN (U+1F47D)
und BROKEN HEART (U+1F494)
was nicht in der mehrsprachigen Grundebene. Sie können nicht einmal in Java als ein Zeichen dargestellt werden "👽💔".length() == 4
. Sie sind definitiv keine Nullzeichen und man sieht Quadrate, wenn Sie keine Schriftarten verwenden, die sie unterstützen.
MySQL unterstützt utf8
nur die mehrsprachige Grundebene, und Sie müssen utf8mb4
stattdessen Folgendes verwenden :
Für ein zusätzliches Zeichen kann utf8 das Zeichen überhaupt nicht speichern, während utf8mb4 vier Bytes benötigt, um es zu speichern. Da utf8 das Zeichen überhaupt nicht speichern kann, haben Sie keine zusätzlichen Zeichen in utf8-Spalten und müssen sich keine Gedanken über das Konvertieren von Zeichen oder den Verlust von Daten machen, wenn Sie utf8-Daten von älteren Versionen von MySQL aktualisieren.
Um diese Zeichen zu unterstützen, muss MySQL 5.5+ sein und Sie müssen es utf8mb4
überall verwenden. Die Verbindungscodierung muss sein utf8mb4
, der Zeichensatz muss sein utf8mb4
und die Kollision muss sein utf8mb4
. Für Java ist es immer noch gerecht "utf-8"
, aber MySQL braucht eine Unterscheidung.
Ich weiß nicht, welchen Treiber Sie verwenden, aber eine treiberunabhängige Methode zum Festlegen des Verbindungszeichensatzes besteht darin, die folgende Abfrage zu senden:
SET NAMES 'utf8mb4'
Gleich nach dem Herstellen der Verbindung.
Siehe auch dies für Connector / J :
14.14: Wie kann ich 4-Byte-UTF8, utf8mb4 mit Connector / J verwenden?
Um 4-Byte-UTF8 mit Connector / J zu verwenden, konfigurieren Sie den MySQL-Server mit character_set_server = utf8mb4. Connector / J verwendet diese Einstellung dann,
solange in der Verbindungszeichenfolge keine Zeichencodierung festgelegt wurde . Dies entspricht der automatischen Erkennung des Zeichensatzes.
Passen Sie auch Ihre Spalten und Ihre Datenbank an:
var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
Auch hier muss Ihre MySQL-Version für die Unterstützung von utf8mb4 relativ aktuell sein.