Det du har er EKSTRATERRESTRIAL ALIEN (U+1F47D)
og BROKEN HEART (U+1F494)
som ikke er på det grundlæggende flersprogede plan. De kan ikke engang repræsenteres i java som ét tegn, "👽💔".length() ==4
. De er bestemt ikke nul-tegn, og man vil se firkanter, hvis du ikke bruger skrifttyper, der understøtter dem.
MySQL's utf8
understøtter kun grundlæggende flersproget plan, og du skal bruge utf8mb4
i stedet
:
For et supplerende tegn kan utf8 slet ikke gemme tegnet, mens utf8mb4 kræver fire bytes for at gemme det. Da utf8 slet ikke kan gemme tegnet, har du ingen supplerende tegn inutf8-kolonner, og du behøver ikke bekymre dig om at konvertere tegn eller miste data, når du opgraderer utf8-data fra ældre versioner af MySQL.
Så for at understøtte disse tegn skal din MySQL være 5.5+, og du skal bruge utf8mb4
overalt. Forbindelseskodning skal være utf8mb4
, tegnsæt skal være utf8mb4
og samling skal være utf8mb4
. For java er det stadig bare "utf-8"
, men MySQL har brug for en sondring.
Jeg ved ikke, hvilken driver du bruger, men en driveragnostisk måde at indstille forbindelsestegnsæt på er at sende forespørgslen:
SET NAMES 'utf8mb4'
Lige efter oprettelse af forbindelsen.
Se også dette for Connector/J :
14.14:Hvordan kan jeg bruge 4-byte UTF8, utf8mb4 med Connector/J?
For at bruge 4-byte UTF8 med Connector/J, konfigurer MySQL-serveren medcharacter_set_server=utf8mb4. Connector/J vil derefter bruge denne indstillingså længe characterEncoding har ikke blevet indstillet i forbindelsesstrengen . Dette svarer til autodetektion af tegnsættet.
Juster også dine kolonner og database:
var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
Igen skal din MySQL-version være relativt opdateret for at kunne understøtte utf8mb4.