To, co masz, jest, EXTRATERRESTRIAL ALIEN (U+1F47D)
a BROKEN HEART (U+1F494)
czego nie ma na podstawowym planie wielojęzyczności. Nie mogą być one nawet w Javie reprezentowana jako jeden char "👽💔".length() == 4
. Zdecydowanie nie są to znaki puste i jeśli nie używasz czcionek, które je obsługują, zobaczysz kwadraty.
MySQL utf8
obsługuje tylko podstawową płaszczyznę wielojęzyczną, a utf8mb4
zamiast tego musisz użyć :
W przypadku znaku dodatkowego utf8 nie może w ogóle przechowywać znaku, podczas gdy utf8mb4 wymaga czterech bajtów do jego przechowywania. Ponieważ utf8 w ogóle nie może przechowywać znaku, nie masz żadnych dodatkowych znaków w kolumnach utf8 i nie musisz martwić się o konwersję znaków lub utratę danych podczas aktualizacji danych utf8 ze starszych wersji MySQL.
Aby obsługiwać te znaki, Twój MySQL musi mieć wersję 5.5+ i musisz go używać utf8mb4
wszędzie. Konieczne jest kodowanie połączenia utf8mb4
, zestaw znaków utf8mb4
i kolakcja utf8mb4
. W przypadku javy to nadal tylko "utf-8"
kwestia, 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.
Zobacz także to dla złącza / J :
14.14: Jak mogę używać 4-bajtowego UTF8, utf8mb4 ze złączem / J?
Aby używać 4-bajtowego UTF8 z łącznikiem / J, skonfiguruj serwer MySQL za pomocą character_set_server = utf8mb4. Connector / J użyje tego ustawienia,
o ile characterEncoding nie zostanie ustawiona w parametrach połączenia . Jest to równoważne z automatycznym wykrywaniem zestawu znaków.
Dostosuj również kolumny i bazę danych:
var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
Twoja wersja MySQL musi być stosunkowo aktualna, aby obsługiwać utf8mb4.