sql >> Databasteknik >  >> RDS >> Mysql

Vad är skillnaden mellan utf8mb4 och utf8 teckenuppsättningar i MySQL?

UTF-8 är en kodning med variabel längd. I fallet med UTF-8 betyder detta att lagring av en kodpunkt kräver en till fyra byte. Men MySQL:s kodning som kallas "utf8" (alias för "utf8mb3") lagrar bara maximalt tre byte per kodpunkt.

Så teckenuppsättningen "utf8"/"utf8mb3" kan inte lagra alla Unicode-kodpunkter:den stöder bara intervallet 0x000 till 0xFFFF, som kallas "Basic Multilingual Plane ". Se även Jämförelse av Unicode-kodningar .

Detta är vad (en tidigare version av samma sida på) MySQL-dokumentationen har att säga om det:

Teckenuppsättningen med namnet utf8[/utf8mb3] använder maximalt tre byte per tecken och innehåller endast BMP-tecken. Från och med MySQL 5.5.3 använder teckenuppsättningen utf8mb4 maximalt fyra byte per tecken och stöder tilläggstecken:

  • För ett BMP-tecken har utf8[/utf8mb3] och utf8mb4 identiska lagringsegenskaper:samma kodvärden, samma kodning, samma längd.

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

Så om du vill att din kolumn ska stödja lagring av tecken som ligger utanför BMP (och du vanligtvis vill), såsom emoji , använd "utf8mb4". Se även Vilka är de vanligaste icke-BMP Unicode-tecknen i faktisk användning? .



  1. Mysql::Fel:Angiven nyckel var för lång; max nyckellängd är 1000 byte

  2. Hur skickar jag Java List of Objects till Oracle Stored Procedur med MyBatis?

  3. SQL inte lika med () Operator för nybörjare

  4. Hur man får databasmetadata