Това, което имате, е ИЗВЪНЗЕМЕН ИЗШЛЕДЕН (U+1F47D)код>
и Разбито сърце (U+1F494)
които не са в основната многоезична равнина. Те дори не могат да бъдат представени в Java като един знак, "👽💔".length() ==4
. Те определено не са нулеви знаци и човек ще види квадратчета, ако не използвате шрифтове, които ги поддържат.
utf8
на MySQL поддържа само основна многоезична равнина и трябва да използвате utf8mb4
вместо това
:
За допълнителен символ, utf8 изобщо не може да съхранява знака, докато utf8mb4 изисква четири байта, за да го съхрани. Тъй като utf8 изобщо не може да съхрани символа, нямате допълнителни знаци inutf8 колони и не е нужно да се притеснявате за преобразуване на знаци или загуба на данни при надграждане на utf8 данни от по-стари версии на MySQL.
Така че, за да поддържате тези знаци, вашият MySQL трябва да е 5.5+ и трябва да използвате utf8mb4
навсякъде. Кодирането на връзката трябва да бъде utf8mb4
, наборът от знаци трябва да бъде utf8mb4
и колекцията трябва да бъде utf8mb4
. За Java все още е просто "utf-8"
, но MySQL се нуждае от разграничение.
Не знам какъв драйвер използвате, но независимият от драйверите начин за задаване на набор от знаци за връзка е да изпратите заявката:
SET NAMES 'utf8mb4'
Веднага след осъществяване на връзката.
Вижте също това за Connector/J :
14.14:Как мога да използвам 4-байтов UTF8, utf8mb4 с Connector/J?
За да използвате 4-байтов UTF8 с Connector/J, конфигурирайте MySQL сървъра сcharacter_set_server=utf8mb4. След това Connector/J ще използва тази настройкадоколкото characterEncoding не е зададен в низа за свързване . Това е еквивалентно на автоматично откриване на набора от знаци.
Коригирайте и вашите колони и база данни:
var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
Отново, вашата версия на MySQL трябва да е относително актуална за поддръжка на utf8mb4.