sql >> Databáze >  >> RDS >> Mysql

java.sql.SQLException:Nesprávná hodnota řetězce:'\xF0\x9F\x91\xBD\xF0\x9F...'

To, co máte, je EXTRATERRESTRIAL ALIEN (U+1F47D) a BROKEN HEART (U+1F494) které nejsou v základní vícejazyčné rovině. Nemohou být ani v jazyce Java zastoupeny jako jeden znak, "👽💔".length() == 4 . Rozhodně to nejsou prázdné znaky a pokud nepoužíváte písma, která je podporují, uvidíte čtverečky.

utf8 MySQL podporuje pouze základní vícejazyčnou rovinu a musíte použít utf8mb4 místo :

U doplňkového znaku nemůže utf8 znak uložit vůbec, zatímco utf8mb4 vyžaduje k uložení čtyři bajty. Protože utf8 neumí vůbec uložit znak, nemáte žádné doplňkové znaky ve sloupcích inutf8 a nemusíte se starat o převod znaků nebo ztrátu dat při upgradu dat utf8 ze starších verzí MySQL.

Takže pro podporu těchto znaků musí být vaše MySQL 5.5+ a musíte použít utf8mb4 všude. Kódování připojení musí být utf8mb4 , znaková sada musí být utf8mb4 a shromažďování musí být utf8mb4 . Pro java je to stále jen "utf-8" , ale MySQL potřebuje rozdíl.

Nevím, jaký ovladač používáte, ale způsob, jak nastavit znakovou sadu připojení bez ohledu na ovladač, je odeslat dotaz:

SET NAMES 'utf8mb4'

Hned po navázání spojení.

Podívejte se také na Connector/J :

14.14:Jak mohu použít 4bajtové UTF8, utf8mb4 s konektorem/J?

Chcete-li použít 4bajtové UTF8 s konektorem/J, nakonfigurujte server MySQL scharacter_set_server=utf8mb4. Connector/J pak toto nastavení použijepokud kódování znaků ne byla nastavena v připojovacím řetězci . To je ekvivalentní autodetekci znakové sady.

Upravte také své sloupce a databázi:

var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL

Opět platí, že vaše verze MySQL musí být relativně aktuální pro podporu utf8mb4.



  1. Logy komprimovaného archivu PostgreSQL ve Windows

  2. Suma s SQL server RollUP - ale jen poslední shrnutí?

  3. Existuje v databázích Oracle nějaký booleovský typ?

  4. Jak úplně odstranit MySQL z Ubuntu