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? .