Те, що у вас є, є EXTRATERRESTRIAL ALIEN (U+1F47D)
і BROKEN HEART (U+1F494)
що не знаходиться в базовій багатомовній площині. Вони не можуть бути навіть представлені в Java в якості одного гольця "👽💔".length() == 4
. Вони точно не є нульовими символами, і ви побачите квадрати, якщо ви не використовуєте шрифти, які їх підтримують.
MySQL utf8
підтримує лише основну багатомовну площину, і вам потрібно використовувати utf8mb4
замість цього :
Для додаткового символу utf8 взагалі не може зберігати символ, тоді як utf8mb4 для його зберігання потрібні чотири байти. Оскільки utf8 взагалі не може зберігати цей символ, у вас немає додаткових символів у стовпцях utf8, і вам не потрібно турбуватися про перетворення символів або втрату даних під час оновлення даних 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-сервер з символом_set_server = utf8mb4. Тоді Connector / J буде використовувати це налаштування до
тих пір, поки в рядку з'єднання не буде встановлено символEncoding . Це еквівалентно автоматичному виявленню набору символів.
Відрегулюйте також свої стовпці та базу даних:
var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
Знову ж, ваша версія MySQL повинна бути відносно сучасною для підтримки utf8mb4.