To, co máte, je EXTRATERRESTRIAL ALIEN (U+1F47D)
a BROKEN HEART (U+1F494)
které nejsou v základní vícejazyčné rovině. Nemohou být ani v jazyce Java zastoupeny jako jeden znak, "👽💔".length() == 4
. Rozhodně to nejsou prázdné znaky a pokud nepoužíváte písma, která je podporují, uvidíte čtverečky.
utf8
MySQL podporuje pouze základní vícejazyčnou rovinu a musíte použít utf8mb4
místo
:
U doplňkového znaku nemůže utf8 znak uložit vůbec, zatímco utf8mb4 vyžaduje k uložení čtyři bajty. Protože utf8 neumí vůbec uložit znak, nemáte žádné doplňkové znaky ve sloupcích inutf8 a nemusíte se starat o převod znaků nebo ztrátu dat při upgradu dat utf8 ze starších verzí MySQL.
Takže pro podporu těchto znaků musí být vaše MySQL 5.5+ a musíte použít utf8mb4
všude. Kódování připojení musí být utf8mb4
, znaková sada musí být utf8mb4
a shromažďování musí být utf8mb4
. Pro java je to stále jen "utf-8"
, ale MySQL potřebuje rozdíl.
Nevím, jaký ovladač používáte, ale způsob, jak nastavit znakovou sadu připojení bez ohledu na ovladač, je odeslat dotaz:
SET NAMES 'utf8mb4'
Hned po navázání spojení.
Podívejte se také na Connector/J :
14.14:Jak mohu použít 4bajtové UTF8, utf8mb4 s konektorem/J?
Chcete-li použít 4bajtové UTF8 s konektorem/J, nakonfigurujte server MySQL scharacter_set_server=utf8mb4. Connector/J pak toto nastavení použijepokud kódování znaků ne byla nastavena v připojovacím řetězci . To je ekvivalentní autodetekci znakové sady.
Upravte také své sloupce a databázi:
var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
Opět platí, že vaše verze MySQL musí být relativně aktuální pro podporu utf8mb4.