Mysql
 sql >> база данни >  >> RDS >> Mysql

java.sql.SQLException:Неправилна стойност на низа:'\xF0\x9F\x91\xBD\xF0\x9F...'

Това, което имате, е ИЗВЪНЗЕМЕН ИЗШЛЕДЕН (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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да напишете израз IF ELSE в MySQL заявка

  2. Буболечка? #1146 - Таблица 'xxx.xxxxx' не съществува

  3. Подзаявки срещу присъединявания

  4. MySQL COALESCE() Обяснено

  5. MySql таблица Вмъкнете, ако не съществува, в противен случай актуализирайте