Ich verwende Emoji Zeichen in meinem Projekt. Diese Zeichen werden in der mysql-Datenbank gespeichert (??). Ich hatte die Datenbank-Standard-Sortierung in "utf8mb4_general_ci" verwendet. Es zeigt
1366 Falscher String-Wert: '\xF0\x9F\x98\x83\xF0\x9F...' für Spalte
'Kommentar' in Zeile 1
Datenbank: Ändern Sie die Standard-Sortierreihenfolge der Datenbank in "utf8mb4".
Tabelle: Ändern Sie die Sortierreihenfolge der Tabelle in "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin".
Abfrage:
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')
utf8mb4
in der Datenbankverbindung: $database_connection = new mysqli($server, $user, $password, $database_name);
$database_connection->set_charset('utf8mb4');
Wenn Sie Solr + Mysql + Java verwenden, können Sie 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;
Code-Beispiel:
import java.net.URLDecoder;
import java.net.URLEncoder;
public static void main(String[] args) {
//SpringApplication.run(ParticipantApplication.class, args);
System.out.println(encodeStringUrl("🇺🇸🇨🇳🇯🇵🇩🇪🔳🔺🆔🆔🆑3⃣5⃣3⃣‼〽➗➗🎦🔆🎦🔆♋♍♋♍⬅⬆⬅⬅🛂🚹🛂🛄🚳🚬💊🔧💊🗿 "));
System.out.println(decodeStringUrl("Hello+emoticons%2C%2C%F0%9F%98%80%F0%9F%98%81%F0%9F%98%8A%F0%9F%98%8B%F0%9F%98%8E%F0%9F%98%8A%F0%9F%98%8D%E2%98%BA%F0%9F%98%98%E2%98%BA%F0%9F%98%91%F0%9F%98%87%F0%9F%98%98%F0%9F%98%8B%F0%9F%90%84"));
}
public static String encodeStringUrl(String url) {
String encodedUrl =null;
try {
encodedUrl = URLEncoder.encode(url, "UTF-8");
} catch (UnsupportedEncodingException e) {
return encodedUrl;
}
return encodedUrl;
}
public static String decodeStringUrl(String encodedUrl) {
String decodedUrl =null;
try {
decodedUrl = URLDecoder.decode(encodedUrl, "UTF-8");
} catch (UnsupportedEncodingException e) {
return decodedUrl;
}
return decodedUrl;
}
Meine Antwort ergänzt nur die Antwort von Selvamani P.
Möglicherweise müssen Sie auch alle SET NAMES utf8
-Abfragen durch SET NAMES utf8mb4
ersetzen. Das hat bei mir funktioniert.
Auch dies ist ein großartiger Artikel, um Ihre Website von utf8 auf utf8mb4 zu portieren. Insbesondere macht der Artikel 2 gute Punkte über Indizes und die Reparatur von Tabellen nach der Konvertierung in utf8mb4:
INDEXE
Bei der Konvertierung von utf8 nach utf8mb4 bleibt die maximale Länge einer Spalte
oder Indexschlüssels in Bytes unverändert. Daher ist sie kleiner in Bezug auf Zeichen, weil die maximale Länge eines Zeichens nun vier statt drei Bytes beträgt. [...] Die InnoDB-Speicher-Engine hat eine maximale Indexlänge von 767 Byte, so dass Sie für utf8- oder utf8mb4-Spalten maximal 255 bzw. 191 Zeichen indizieren können. Wenn Sie derzeit utf8-Spalten mit Indizes haben, die länger als 191 Zeichen sind, müssen Sie eine kleinere Anzahl von Zeichen indizieren, wenn Sie utf8mb4 verwenden.
TABELLEN WIEDERHERSTELLEN
Nachdem Sie ein Upgrade des MySQL-Servers durchgeführt und die notwendigen Änderungen vorgenommen haben
wie oben beschrieben, reparieren und optimieren Sie alle Datenbanken und Tabellen. Ich habe das nicht sofort nach dem Upgrade gemacht (ich dachte nicht, dass es (ich hielt es nicht für notwendig, da auf den ersten Blick alles einwandfrei zu funktionieren schien), und stieß auf einige seltsame Fehler, bei denen UPDATE-Anweisungen keine Wirkung hatten, auch wenn keine Fehler ausgelöst wurden.
Lesen Sie mehr über die Abfragen zur Reparatur von Tabellen in diesem Artikel.