W moim projekcie używam znaku Emoji. Te znaki są zapisywane (??) w bazie danych mysql. Użyłem domyślnego sortowania bazy danych w programie utf8mb4_general_ci
. To pokazuje
1366 Niepoprawna wartość ciągu: „\ xF0 \ x9F \ x98 \ x83 \ xF0 \ x9F ...” dla kolumny „komentarz” w wierszu 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'
Ustaw utf8mb4 w połączeniu z bazą danych:$database_connection = new mysqli($server, $user,$password,$database_name); $database_connection->set_charset("utf8mb4");
Odpowiedzi:
krok 1, zmień domyślny zestaw znaków w bazie danych:
krok 2, ustaw kodowanie podczas tworzenia tabeli:
lub zmień tabelę
źródło
1) Baza danych: Zmień domyślne sortowanie bazy danych na
utf8mb4
.2) Tabela: Zmień sortowanie tabeli na
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
.Pytanie:
3) Kod:
4) Ustaw
utf8mb4
w połączeniu z bazą danych:źródło
SET NAMES utf8mb4;
aby zacząć zapisywać emotikony; przed tym rozkazem ratował ich jako??
Zarówno bazy danych, jak i tabele powinny mieć zestaw znaków
utf8mb4
i sortowanieutf8mb4_unicode_ci
.Tworząc nową bazę danych należy użyć:
Jeśli masz istniejącą bazę danych i chcesz dodać wsparcie:
Musisz także ustawić prawidłowy zestaw znaków i sortowanie dla swoich tabel:
lub zmień to, jeśli masz istniejące tabele z dużą ilością danych:
Pamiętaj, że
utf8_general_ci
nie jest to już zalecana najlepsza praktyka. Zobacz powiązane pytania i odpowiedzi:Jaka jest różnica między utf8_general_ci i utf8_unicode_ci w Stack Overflow.
źródło
ALTER TABLE mytable MODIFY my_emoji_friendly_text_column VARCHAR(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8mb4_bin
vsutf8mb4_unicode_ci
dla kolumn?Jeśli korzystasz z Solr + Mysql + Java, możesz użyć:
Można to wykorzystać:
W powyższym przypadku jest to jedno z rozwiązań umożliwiających przechowywanie emotikonów w systemie.
Kroki, aby z niego skorzystać:
Używana biblioteka: import java.net.URLDecoder; import java.net.URLEncoder;
Przykład kodu:
źródło
%
, dekodowanie się zepsuje.Zaktualizowałem moją bazę danych i tabelę, aby zaktualizować je z utf8 do utf8mb4 . Ale dla mnie nic nie działa. Potem próbowałem zaktualizować typ danych kolumny na blob , na szczęście zadziałało i dane zostały zapisane. Nawet moja baza danych i tabela to ZESTAW ZNAKÓW utf8 COLLATE utf8_unicode
źródło
Polecenie do zmodyfikowania kolumny to:
I musimy użyć type =
BLOB
Przykład modyfikacji jest następujący: -
Sprawdziłem, że najnowsze bazy danych MySQL i inne nie muszą
''
być używane w poleceniu na nazwa_tabeli, nazwa_kolumny itp.Pobierz i zapisz dane: bezpośrednio zapisz treść czatu w kolumnie i pobierz dane, pobierz dane jako tablicę bajtów
(byte[])
z kolumny db, a następnie przekonwertuj je nastring
np. (Kod Java)źródło
text
/varchar
pole na ablob
i gotowe. Szaleństwo konwertowania zestawu znaków i sortowania na całym DB tylko w tym celu :)Moja odpowiedź tylko dodaje do odpowiedzi Selvamani P.
Może być również konieczna zmiana
SET NAMES utf8
zapytań za pomocąSET NAMES utf8mb4
. To załatwiło sprawę dla mnie.Ponadto, jest to świetny artykuł na swojej stronie portu z utf8 do utf8mb4. W szczególności artykuł przedstawia 2 dobre punkty dotyczące indeksów i naprawy tabel po ich konwersji na utf8mb4:
INDEKSY
STOŁY NAPRAWCZE
Przeczytaj więcej o zapytaniach do naprawy tabel w artykule.
źródło
REPAIR TABLE
iOPTIMIZE TABLE
powinny być niepotrzebne -ALTER
powoduje to ich wykonanie.W powyższych odpowiedziach nie wspomniano o głównym punkcie, że
Musimy przekazać ciąg zapytania z opcjami
"useUnicode=yes"
i parametrami"characterEncoding=UTF-8"
połączeniaCoś takiego
źródło
Cóż, nie musisz zmieniać całego zestawu znaków DB. Zamiast tego możesz to zrobić, zmieniając kolumnę na typ blob .
ALTER TABLE wiadomości MODIFY content BLOB;
źródło
Mam dobre rozwiązanie, aby zaoszczędzić Twój czas. Ja też napotykam ten sam problem, ale nie mogłem go rozwiązać pierwszą odpowiedzią.
Twój domyślny charakter to utf-8. Ale emoji potrzebuje utf8mb4 do obsługi. Jeśli masz uprawnienia do zmiany pliku konfiguracyjnego mysql, możesz wykonać ten krok.
Dlatego wykonaj następujący krok, aby zaktualizować zestaw znaków (z utf-8 do utf8mb4).
krok 1. otwórz swój my.cnf dla mysql, dodaj następujące wiersze do swojego my.cnf.
krok 2. zatrzymaj usługę mysql i uruchom usługę mysql
Skończone! Następnie możesz sprawdzić, czy twoja postać została zmieniona na utf8mb4.
źródło
Obsługa emoji dla aplikacji posiadającej stos techniczny - mysql, java, springboot, hibernate
Zastosuj poniższe zmiany w mysql do obsługi Unicode.
ALTER DATABASE <database-name> CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE <table-name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Połączenie DB - zmiana adresu URL jdbc:
jdbc:mysql://localhost:3306/<database-name>?useUnicode=yes&characterEncoding=UTF-8
Uwaga - Jeśli powyższy krok nie działa, zaktualizuj wersję mysql-connector do 8.0.15. (mysql 5.7 współpracuje ze złączem w wersji 8.0.15 dla obsługi Unicode)
źródło
Najprostszym rozwiązaniem, które działa dla mnie, jest przechowywanie danych jako json_encode .
później, kiedy będziesz pobierać, po prostu upewnij się, że masz json_decode .
Tutaj nie musisz zmieniać sortowania ani zestawu znaków bazy danych i tabeli.
źródło
Dla każdego, kto próbuje rozwiązać ten problem na zarządzanej instancji MySQL (w moim przypadku na AWS RDS), najłatwiejszym sposobem było zmodyfikowanie grupy parametrów i ustawienie zestawu znaków serwera i sortowania odpowiednio na
utf8mb4
iutf8mb4_bin
. Po ponownym uruchomieniu serwera szybkie zapytanie weryfikuje ustawienia baz systemowych i nowo utworzonych:źródło