Projemde Emoji karakteri kullanıyorum. Bu karakterler mysql veritabanına kaydediliyor (??). Veritabanı Varsayılan harmanlamasını utf8mb4_general_ci
içinde kullandım.
Bu gösteriyor ki
1366 Hatalı dize değeri: '\xF0\x9F\x98\x83\xF0\x9F...' sütun için 'yorum' satır 1'de
Veritabanı: Veritabanı varsayılan harmanlamasını utf8mb4
olarak değiştirin.
Tablo: Tablo harmanlamasını CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
olarak değiştirin.
Sorgula:
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
ayarını yapın: $database_connection = new mysqli($server, $user, $password, $database_name);
$database_connection->set_charset('utf8mb4');
Eğer Solr + Mysql + Java kullanıyorsanız kullanabilirsiniz:
Bu Kullanılabilir:
Yukarıdaki durumda bu, ifadelerinizi sisteminizde saklamak için çözümlerden biridir.
Kullanım adımları:
Kullanılan kütüphane: import java.net.URLDecoder; import java.net.URLEncoder;
Kod örneği:
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;
}
***Benim cevabım sadece Selvamani P'nin cevabına ektir.
Ayrıca tüm SET NAMES utf8
sorgularını SET NAMES utf8mb4
ile değiştirmeniz gerekebilir. Bu benim için işe yaradı.
Ayrıca, web sitenizi utf8'den utf8mb4'e taşımak için bu harika bir makale. Makale özellikle dizinler ve utf8mb4'e dönüştürdükten sonra tabloları onarma konusunda 2 iyi noktaya değiniyor:
İNDEXLER
utf8'den utf8mb4'e dönüştürürken, bir sütunun maksimum uzunluğu veya dizin anahtarı bayt cinsinden değişmez. Bu nedenle, daha küçüktür karakter cinsinden, çünkü bir karakterin maksimum uzunluğu şimdi üç yerine dört bayt. [InnoDB depolama motorunun maksimum dizin uzunluğu 767 bayttır, bu nedenle utf8 veya utf8mb4 sütunları için sırasıyla maksimum 255 veya 191 karakter dizinleyebilirsiniz. Şu anda 191 karakterden daha uzun indekslere sahip utf8 sütunlarınız varsa, utf8mb4 kullanırken daha az sayıda karakter indekslemeniz gerekecektir.
MASALARI ONARIYORUM
MySQL sunucusunu yükselttikten ve gerekli değişiklikleri yaptıktan sonra Yukarıda açıklandığı gibi, tüm veritabanlarını onardığınızdan ve optimize ettiğinizden emin olun ve masalar. Yükseltmeden sonra bunu hemen yapmadım (bunun gerekliydi, çünkü ilk bakışta her şey yolunda görünüyordu) ve UPDATE deyimlerinin herhangi bir hata içermediği bazı garip hatalarla karşılaştı etkisi, hiçbir hata atılmamış olmasına rağmen.
Makalede tabloları onarma sorguları hakkında daha fazla bilgi edinin.