Jeg bruker Emoji-tegn i prosjektet mitt. Disse tegnene lagres (??) i mysql-databasen. Jeg hadde brukt databasen Standard collation i utf8mb4_general_ci
.
Det viser
1366 Feil strengverdi: '\xF0\x9F\x98\x83\xF0\x9F...' for kolonne 'kommentar' på rad 1
Database: Endre databasens standard kollasjon til utf8mb4
.
Tabell: Endre tabellkollasjon til CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
.
Spørring:
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
i databasetilkoblingen: $database_connection = new mysqli($server, $user, $password, $database_name);
$database_connection->set_charset('utf8mb4');
Hvis du bruker Solr + Mysql + Java, kan du bruke:
Dette kan brukes:
I dette tilfellet er dette en av løsningene for å lagre uttrykksikoner i systemet.
Fremgangsmåte for å bruke den:
Bibliotek som brukes: import java.net.URLDecoder; import java.net.URLEncoder;
Kodeeksempel:
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;
}
Mitt svar er bare et tillegg til svaret til Selvamani P.
Du må kanskje også endre alle SET NAMES utf8
-spørringer med SET NAMES utf8mb4
. Det gjorde susen for meg.
Også dette er en flott artikkel for å portere nettstedet ditt fra utf8 til utf8mb4. Spesielt gjør artikkelen 2 gode poeng om indekser og reparasjon av tabeller etter konvertering til utf8mb4:
INDEXES (INDEKSER)
Når du konverterer fra utf8 til utf8mb4, er den maksimale lengden på en kolonne eller indeksnøkkel eller indeksnøkkel uendret i antall byte. Derfor er den mindre
i form av tegn, fordi den maksimale lengden på et tegn er nå er fire byte i stedet for tre. [...] InnoDB-lagringsmotoren har en maksimal indekslengde på 767 byte, så for utf8- eller utf8mb4-kolonner kan du maksimalt indeksere henholdsvis 255 eller 191 tegn. Hvis du for øyeblikket har utf8-kolonner med indekser som er lengre enn 191 tegn, må du indeksere et mindre antall tegn når du bruker utf8mb4.
**REPARERE TABELLER
Etter at du har oppgradert MySQL-serveren og gjort de nødvendige endringene som er forklart ovenfor, må du sørge for å reparere og optimalisere alle databaser og tabeller. tabeller. Jeg gjorde ikke dette med en gang etter oppgraderingen (jeg trodde ikke at det var
var nødvendig, ettersom alt så ut til å fungere fint ved første øyekast), og kjørte inn i noen rare bugs der UPDATE-setninger ikke hadde noen effekt, selv om ingen feil ble kastet.
Les mer om spørringene for å reparere tabeller i artikkelen.