Wat je hebt is EXTRATERRESTRIAL ALIEN (U+1F47D)
en BROKEN HEART (U+1F494)
die niet in het meertalige basisvlak liggen. Ze kunnen zelfs niet in Java worden weergegeven als één teken, "👽💔".length() == 4
. Het zijn zeker geen null-tekens en je zult vierkanten zien als je geen lettertypen gebruikt die ze ondersteunen.
Voor een aanvullend teken kan utf8 het teken helemaal niet opslaan, terwijl utf8mb4 vier bytes nodig heeft om het op te slaan. Aangezien utf8 het teken helemaal niet kan opslaan, hebt u geen aanvullende tekens in de utf8-kolommen en hoeft u zich geen zorgen te maken over het converteren van tekens of het verliezen van gegevens bij het upgraden van utf8-gegevens van oudere versies van MySQL.
Dus om deze karakters te ondersteunen, moet je MySQL 5.5+ zijn en moet je utf8mb4
gebruiken overal. Verbindingscodering moet utf8mb4
zijn , tekenset moet utf8mb4
. zijn en verzameling moet utf8mb4
. zijn . Voor Java is het nog steeds gewoon "utf-8"
, maar MySQL heeft een onderscheid nodig.
Ik weet niet welk stuurprogramma u gebruikt, maar een stuurprogramma-onafhankelijke manier om de verbindingstekenset in te stellen, is door de vraag te verzenden:
SET NAMES 'utf8mb4'
Direct na het maken van de verbinding.
Zie ook dit voor Connector/J :
14.14:Hoe kan ik 4-byte UTF8, utf8mb4 met Connector/J gebruiken?
Om 4-byte UTF8 met Connector/J te gebruiken, configureert u de MySQL-server withcharacter_set_server=utf8mb4. Connector/J zal die instelling dan gebruikenzolang characterEncoding niet . heeft ingesteld in de verbindingsreeks . Dit komt overeen met automatische detectie van de tekenset.
Pas ook uw kolommen en database aan:
var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
Nogmaals, uw MySQL-versie moet relatief up-to-date zijn voor utf8mb4-ondersteuning.