sql >> Database >  >> RDS >> Mysql

Wat is het verschil tussen utf8mb4- en utf8-tekensets in MySQL?

UTF-8 is een codering met variabele lengte. In het geval van UTF-8 betekent dit dat het opslaan van één codepunt één tot vier bytes vereist. De MySQL-codering genaamd "utf8" (alias van "utf8mb3") slaat echter maximaal drie bytes per codepunt op.

Dus de tekenset "utf8"/"utf8mb3" kan niet alle Unicode-codepunten opslaan:het ondersteunt alleen het bereik 0x000 tot 0xFFFF, dat de "Basic meertalig vliegtuig ".Zie ook Vergelijking van Unicode-coderingen .

Dit is wat (een eerdere versie van dezelfde pagina op) de MySQL-documentatie heeft erover te zeggen:

De tekenset met de naam utf8[/utf8mb3] gebruikt maximaal drie bytes per teken en bevat alleen BMP-tekens. Vanaf MySQL 5.5.3 gebruikt de utf8mb4-tekenset maximaal vier bytes per teken en ondersteunt aanvullende tekens:

  • Voor een BMP-teken hebben utf8[/utf8mb3] en utf8mb4 identieke opslagkenmerken:dezelfde codewaarden, dezelfde codering, dezelfde lengte.

  • Voor een aanvullend teken kan utf8[/utf8mb3] het teken helemaal niet opslaan , terwijl utf8mb4 vier bytes nodig heeft om het op te slaan. Aangezien utf8[/utf8mb3] het teken helemaal niet kan opslaan, hebt u geen aanvullende tekens in utf8[/utf8mb3]-kolommen en hoeft u zich geen zorgen te maken over het converteren van tekens of gegevensverlies bij het upgraden van utf8[/utf8mb3]-gegevens van oudere versies van MijnSQL.

Dus als u wilt dat uw kolom het opslaan van tekens ondersteunt die buiten de BMP liggen (en u wilt dat meestal), zoals emoji , gebruik "utf8mb4". Zie ook Wat zijn de meest voorkomende niet-BMP Unicode-tekens die daadwerkelijk worden gebruikt? .



  1. Oracle:dagen tussen twee datums en weekdagen uitsluiten hoe om te gaan met negatieve getallen

  2. SQL Server SHOWPLAN_ALL

  3. DML invoegen met bindingsvariabele:clausule van uitvoering onmiddellijke verklaring GEBRUIKEN

  4. Wat is een weergave in Oracle?