To, co masz, to POZAZIEMSKI OBCY (U+1F47D)
i ZŁAMANE SERCE (U+1F494)
które nie znajdują się na podstawowej płaszczyźnie wielojęzycznej. Nie mogą być nawet reprezentowane w java jako jeden znak, "👽💔".length() ==4
. Na pewno nie są to znaki zerowe i jeśli nie używasz czcionek, które je obsługują, zobaczysz kwadraty.
utf8
MySQL obsługuje tylko podstawowy samolot wielojęzyczny i musisz użyć utf8mb4
zamiast tego
:
W przypadku znaku uzupełniającego utf8 nie może w ogóle przechowywać znaku, podczas gdy utf8mb4 wymaga czterech bajtów do jego przechowywania. Ponieważ utf8 nie może w ogóle przechowywać znaku, nie masz żadnych dodatkowych znaków w kolumnach inutf8 i nie musisz się martwić o konwersję znaków lub utratę danych podczas aktualizacji danych utf8 ze starszych wersji MySQL.
Więc aby obsługiwać te znaki, twój MySQL musi mieć 5.5+ i musisz użyć utf8mb4
wszędzie. Kodowanie połączenia musi być utf8mb4
, zestaw znaków musi mieć postać utf8mb4
a zestawienie musi być utf8mb4
. W przypadku javy to wciąż tylko "utf-8"
, ale MySQL wymaga rozróżnienia.
Nie wiem, jakiego sterownika używasz, ale niezależnym od sterownika sposobem ustawienia zestawu znaków połączenia jest wysłanie zapytania:
SET NAMES 'utf8mb4'
Zaraz po nawiązaniu połączenia.
14.14:Jak mogę używać 4-bajtowego UTF8, utf8mb4 ze złączem/J?
Aby użyć 4-bajtowego UTF8 ze złączem/J, skonfiguruj serwer MySQL withcharacter_set_server=utf8mb4. Connector/J użyje wtedy tego ustawieniao ile characterEncoding nie została ustawiona w ciągu połączeń . Jest to równoważne automatycznemu wykrywaniu zestawu znaków.
Dostosuj również kolumny i bazę danych:
var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
Ponownie, Twoja wersja MySQL musi być stosunkowo aktualna, aby obsługiwać utf8mb4.