Ich verwende Emoji-Zeichen in meinem Projekt. Diese Zeichen werden in der MySQL-Datenbank gespeichert (??). Ich hatte die Datenbank Standardkollatierung in verwendet utf8mb4_general_ci
. Es zeigt
1366 Falscher Zeichenfolgenwert: '\ xF0 \ x9F \ x98 \ x83 \ xF0 \ x9F ...' für Spalte 'Kommentar' in Zeile 1
ALTER TABLE Tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
insert into tablename (column1,column2,column3,column4,column5,column6,column7) values ('273','3','Hdhdhdh😜😀😊😃hzhzhzzhjzj 我爱你 ❌',49,1,'2016-09-13 08:02:29','2016-09-13 08:02:29'
Setzen Sie utf8mb4 in der Datenbankverbindung:$database_connection = new mysqli($server, $user,$password,$database_name); $database_connection->set_charset("utf8mb4");
Antworten:
Schritt 1: Ändern Sie den Standardzeichensatz Ihrer Datenbank:
Schritt 2: Legen Sie den Zeichensatz beim Erstellen der Tabelle fest:
oder Tabelle ändern
quelle
1) Datenbank: Ändern Sie die Standardkollatierung der Datenbank als
utf8mb4
.2) Tabelle: Ändern Sie die Tabellensortierung als
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
.Abfrage:
3) Code:
4) In
utf8mb4
Datenbankverbindung setzen:quelle
SET NAMES utf8mb4;
, um Emoticons zu speichern. vor diesem Befehl wurden sie als??
Sowohl die Datenbanken als auch die Tabellen sollten Zeichensatz
utf8mb4
und Sortierung habenutf8mb4_unicode_ci
.Beim Erstellen einer neuen Datenbank sollten Sie Folgendes verwenden:
Wenn Sie über eine vorhandene Datenbank verfügen und Unterstützung hinzufügen möchten:
Sie müssen auch den richtigen Zeichensatz und die richtige Sortierung für Ihre Tabellen festlegen :
oder ändern Sie es, wenn Sie vorhandene Tabellen mit vielen Daten haben:
Beachten Sie, dass dies
utf8_general_ci
nicht mehr als bewährte Methode empfohlen wird. Siehe die entsprechenden Fragen und Antworten:Was ist der Unterschied zwischen utf8_general_ci und utf8_unicode_ci beim Stapelüberlauf?
quelle
ALTER TABLE mytable MODIFY my_emoji_friendly_text_column VARCHAR(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8mb4_bin
vsutf8mb4_unicode_ci
für die Spalten?Wenn Sie Solr + MySQL + Java verwenden, können Sie Folgendes verwenden:
Dies kann verwendet werden:
Im obigen Fall ist dies eine der Lösungen, um Ihre Emoticons in Ihrem System zu speichern.
Schritte zur Verwendung:
Verwendete Bibliothek: import java.net.URLDecoder; import java.net.URLEncoder;
Codebeispiel:
quelle
%
, wird Ihre Dekodierung unterbrochen.Ich habe meine Datenbank und Tabelle auf ein Upgrade von utf8 auf utf8mb4 aktualisiert . Aber bei mir funktioniert nichts. Dann habe ich versucht, den Spaltendatentyp auf Blob zu aktualisieren. Zum Glück hat es bei mir funktioniert und die Daten wurden gespeichert. Sogar meine Datenbank und meine Tabelle sind CHARACTER SET utf8 COLLATE utf8_unicode
quelle
Der Befehl zum Ändern der Spalte lautet:
Und wir müssen type = verwenden
BLOB
Das zu ändernde Beispiel lautet wie folgt: -
Ich habe überprüft, dass die neuesten mySQL- und anderen Datenbanken nicht
''
im Befehl für Tabellenname, Spaltenname usw. verwendet werden müssen.Daten abrufen und speichern: Speichern Sie den Chat-Inhalt direkt in einer Spalte und rufen Sie Daten ab. Rufen Sie Daten als Byte-Array
(byte[])
aus der DB-Spalte ab und konvertieren Sie sie dann instring
z. B. (Java-Code).quelle
text
/varchar
in ablob
und Sie sind fertig. Wahnsinn, Zeichensatz und Kollatierung auf der gesamten DB nur dafür zu konvertieren :)Meine Antwort ergänzt nur die Antwort von Selvamani P.
Möglicherweise müssen Sie auch alle
SET NAMES utf8
Abfragen mit ändernSET NAMES utf8mb4
. Das hat den Trick für mich getan.Auch dies ist ein großer Artikel in dem Hafen Ihre Website von UTF - 8 zu utf8mb4. Insbesondere macht der Artikel zwei gute Punkte zu Indizes und zum Reparieren von Tabellen, nachdem diese in utf8mb4 konvertiert wurden:
INDEXE
TABELLEN REPARIEREN
Weitere Informationen zu den Abfragen zum Reparieren von Tabellen finden Sie im Artikel.
quelle
REPAIR TABLE
undOPTIMIZE TABLE
sollte unnötig sein - undALTER
hat den Effekt, sie zu tun.Der Hauptpunkt wurde in den obigen Antworten nicht erwähnt.
Wir müssen die Abfragezeichenfolge mit den Optionen
"useUnicode=yes"
und"characterEncoding=UTF-8"
in der Verbindungszeichenfolge übergebenEtwas wie das
quelle
Nun, Sie müssen den gesamten DB-Zeichensatz nicht ändern. Stattdessen können Sie dies tun, indem Sie die Spalte in einen Blob- Typ ändern .
ALTER TABLE-Nachrichten MODIFY content BLOB;
quelle
Ich habe eine gute Lösung, um Ihre Zeit zu sparen. Ich treffe auch das gleiche Problem, aber ich konnte dieses Problem mit der ersten Antwort nicht lösen.
Dein defualt Charakter ist utf-8. Aber emoji braucht utf8mb4, um es zu unterstützen. Wenn Sie die Berechtigung haben, die Konfigurationsdatei von MySQL zu überarbeiten, können Sie diesen Schritt ausführen.
Führen Sie daher den folgenden Schritt aus, um Ihren Zeichensatz zu aktualisieren (von utf-8 auf utf8mb4).
Schritt 1. Öffnen Sie Ihre my.cnf für mysql und fügen Sie die folgenden Zeilen zu Ihrer my.cnf hinzu.
Schritt 2. Beenden Sie Ihren MySQL-Dienst und starten Sie den MySQL-Dienst
Fertig! Dann können Sie überprüfen, ob Ihr Charakter in utf8mb4 geändert wurde.
quelle
Emoji-Unterstützung für Anwendungen mit Tech-Stack - MySQL, Java, Springboot, Ruhezustand
Übernehmen Sie die folgenden Änderungen in MySQL für die Unicode-Unterstützung.
ALTER DATABASE <database-name> CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE <table-name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
DB-Verbindung - Änderung der JDBC-URL:
jdbc:mysql://localhost:3306/<database-name>?useUnicode=yes&characterEncoding=UTF-8
Hinweis - Wenn der obige Schritt nicht funktioniert, aktualisieren Sie bitte die MySQL-Connector-Version auf 8.0.15. (MySQL 5.7 funktioniert mit Connector Version 8.0.15 für Unicode-Unterstützung)
quelle
Die einfachste Lösung, die für mich funktioniert, besteht darin, die Daten als json_encode zu speichern .
Stellen Sie später beim Abrufen sicher, dass Sie json_decode verwenden .
Hier müssen Sie weder die Sortierung noch den Zeichensatz der Datenbank und der Tabelle ändern.
quelle
Für alle, die versuchen, dies auf einer verwalteten MySQL-Instanz (in meinem Fall auf AWS RDS) zu lösen, bestand die einfachste Möglichkeit darin, die Parametergruppe zu ändern und den Serverzeichensatz und die Sortierung auf
utf8mb4
bzw.utf8mb4_bin
festzulegen. Nach dem Neustart des Servers überprüft eine schnelle Abfrage die Einstellungen für Systemdatenbanken und alle neu erstellten:quelle