java - x88 - mysql incorrect string value umlaut



Falscher String-Wert ohne "? CharacterEncoding=UTF-8" (2)

Ich versuche, einen Text in ein Feld in meiner Datenbank einzufügen, und ich habe ein Problem mit Emojis. Was passiert, wenn ich meine Verbindungs-URL nicht auf jdbc:mysql://localhost:3306/MyDatabase?characterEncoding=UTF-8 speichert der Server die Emojis ganz gut, speichert aber auch nicht-lateinische Zeichen als Frage Marken.

Wenn ich nun meine Verbindungs-URL so setze, mag der Server die Emojis nicht und gibt den Fehler aus:

Incorrect string value: '\xF0\x9F\x98\xB1\xF0\x9F...' for column 'fullTweet' at row 1

Ich habe alle notwendigen Schritte für die utf8-Kompatibilität auf meinem lokalen Server durchgeführt:

  1. Ich habe die Zeile character-set-server=utf8mb4 zu my.ini
  2. Die Abfrage show variables like 'character_set_server' zurück utf8mb4
  3. Ich erstelle meine Datenbank mit der Abfrage CREATE DATABASE twitter DEFAULT CHARACTER SET utf8mb4
  4. und standardmäßig verwenden alle meine Tabellen und Felder meiner Tabellen utf8mb4_general_ci (wie ich in phpmyadmin )

Was fehlt? Ich bin mir sicher, dass ich alle notwendigen Schritte getan habe und ich kann es immer noch nicht zum Laufen bringen, entweder speichert es nur lateinische Zeichen oder es speichert keine Emoji.

Zusätzliche Informationen aus einer meiner vorherigen Fragen:

Ich kann die Emoji in der Datenbank manuell eingeben und sie zeigen genau so, wie sie im Debugger angezeigt werden (als Boxen). Ich führe diese Abfrage aus:

INSERT INTO `tweets`(`id`, `createdAt`, `screenName`, `fullTweet`, `editedTweet`) VALUES (450,"1994-12-19","john",_utf8mb4 x'F09F98B1',_utf8mb4 x'F09F98B1')

Und so sieht die Zeile in der Tabelle aus:


Answer #1

Dies wird im Detail erklärt unter Wie man vollen Unicode in MySQL-Datenbanken unterstützt · Mathias Bynens Grundsätzlich glaube ich, dass Sie das vermissen (ab Schritt 5 )

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

Dann sollten Sie characterEncoding=UTF-8 von Ihrer URL entfernen. Überprüfen Sie auch, ob Sie MySQL Connector / J 5.1.13+ haben (siehe JDBC-URL für die MySQL-Konfiguration, um utf8-Zeichencodierung zu verwenden )


Answer #2

Probieren Sie das ->

convert('string' using utf8)

oder

convert('string',char)

oder

convert('string' using latin1)

oder verwenden Sie die Zeichencodierung, die Sie in der Tabelle festgelegt haben. Der Code, den ich zur Verfügung gestellt habe, sind mysql-Funktionen.





character-encoding