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

Jaký je rozdíl mezi znakovými sadami utf8mb4 a utf8 v MySQL?

UTF-8 je kódování s proměnnou délkou. V případě UTF-8 to znamená, že uložení jednoho bodu kódu vyžaduje jeden až čtyři bajty. Kódování MySQL nazvané "utf8" (alias "utf8mb3") však ukládá pouze maximálně tři bajty na bod kódu.

Znaková sada "utf8"/"utf8mb3" tedy nemůže uložit všechny body kódu Unicode:podporuje pouze rozsah 0x000 až 0xFFFF, který se nazývá "Základní vícejazyčná rovina ".Viz také Porovnání kódování Unicode .

To je to, co (předchozí verze stejné stránky na) dokumentaci MySQL musí o tom říct:

Znaková sada s názvem utf8[/utf8mb3] používá maximálně tři bajty na znak a obsahuje pouze znaky BMP. Od MySQL 5.5.3 znaková sada utf8mb4 používá maximálně čtyři bajty na znak, podporuje doplňkové znaky:

  • Pro znak BMP mají utf8[/utf8mb3] a utf8mb4 identické charakteristiky úložiště:stejné hodnoty kódu, stejné kódování, stejnou délku.

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

Pokud tedy chcete, aby váš sloupec podporoval ukládání znaků ležících mimo BMP (a to obvykle chcete), jako je emoji , použijte "utf8mb4". Viz také Jaké jsou nejběžnější znaky Unicode mimo BMP, které se ve skutečnosti používají? .



  1. Jak zjistit oprávnění a role udělené uživateli v Oracle?

  2. Jak NOW() funguje v MariaDB

  3. Jak předat parametry zpětnému volání dotazu mysql v nodejs

  4. Převést „smalldatetime“ na „čas“ v SQL Server (příklady T-SQL)