sql >> Databasteknik >  >> RDS >> Mysql

java.sql.SQLException:Felaktigt strängvärde:'\xF0\x9F\x91\xBD\xF0\x9F...'

Det du har är EXTRATERRESTRIAL ALIEN (U+1F47D) och BROKEN HEART (U+1F494) som inte är i det grundläggande flerspråkiga planet. De kan inte ens representeras i java som ett tecken, "👽💔".length() ==4 . De är definitivt inte nolltecken och man kommer att se rutor om du inte använder teckensnitt som stöder dem.

MySQL:s utf8 stöder endast grundläggande flerspråkigt plan, och du måste använda utf8mb4 istället :

För ett tilläggstecken kan utf8 inte lagra tecknet alls, medan utf8mb4 kräver fyra byte för att lagra det. Eftersom utf8 inte kan lagra tecknet alls, har du inga kompletterande tecken inutf8-kolumner och du behöver inte oroa dig för att konvertera tecken eller förlora data när du uppgraderar utf8-data från äldre versioner av MySQL.

Så för att stödja dessa tecken måste din MySQL vara 5.5+ och du måste använda utf8mb4 överallt. Anslutningskodning måste vara utf8mb4 , teckenuppsättningen måste vara utf8mb4 och samling måste vara utf8mb4 . För java är det fortfarande bara "utf-8" , men MySQL behöver en distinktion.

Jag vet inte vilken drivrutin du använder men ett drivrutinsagnostiskt sätt att ställa in anslutningsteckenuppsättningen är att skicka frågan:

SET NAMES 'utf8mb4'

Direkt efter anslutningen.

Se även detta för Connector/J :

14.14:Hur kan jag använda 4-byte UTF8, utf8mb4 med Connector/J?

För att använda 4-byte UTF8 med Connector/J, konfigurera MySQL-servern med Character_set_server=utf8mb4. Connector/J kommer sedan att använda den inställningenså länge som teckenkodning inte har har ställts in i anslutningssträngen . Detta motsvarar autodetektering av teckenuppsättningen.

Justera dina kolumner och databas också:

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

Återigen, din MySQL-version måste vara relativt uppdaterad för utf8mb4-stöd.



  1. ORA-24550:signal mottagen:[si_signo=6] fel

  2. Hur UPPER() fungerar i MariaDB

  3. Exportera SQLite-databas till en CSV-fil

  4. Hur man applicerar att ha klausul med Group by i Select Query - SQL Server / TSQL Tutorial Del 131