UTF-8 er en kodning med variabel længde. I tilfælde af UTF-8 betyder det, at lagring af et kodepunkt kræver en til fire bytes. MySQL's kodning kaldet "utf8" (alias for "utf8mb3") gemmer dog kun maksimalt tre bytes pr. kodepunkt.
Så tegnsættet "utf8"/"utf8mb3" kan ikke gemme alle Unicode-kodepunkter:det understøtter kun området 0x000 til 0xFFFF, som kaldes "Grundlæggende flersproget plan ". Se også Sammenligning af Unicode-kodninger .
Dette er hvad (en tidligere version af samme side på) MySQL-dokumentationen har at sige om det:
Tegnsættet med navnet utf8[/utf8mb3] bruger maksimalt tre bytes pr. tegn og indeholder kun BMP-tegn. Fra og med MySQL 5.5.3 bruger utf8mb4-tegnsættet maksimalt fire bytes pr. tegn, der understøtter supplerende tegn:
-
For et BMP-tegn har utf8[/utf8mb3] og utf8mb4 identiske lagerkarakteristika:samme kodeværdier, samme kodning, samme længde.
-
For et supplerende tegn kan utf8[/utf8mb3] slet ikke gemme tegnet , mens utf8mb4 kræver fire bytes for at gemme det. Da utf8[/utf8mb3] slet ikke kan gemme tegnet, har du ingen supplerende tegn i utf8[/utf8mb3] kolonner, og du behøver ikke bekymre dig om at konvertere tegn eller miste data, når du opgraderer utf8[/utf8mb3] data fra ældre versioner af MySQL.
Så hvis du vil have din kolonne til at understøtte lagring af tegn, der ligger uden for BMP (og det vil du normalt), såsom emoji , brug "utf8mb4". Se også Hvad er de mest almindelige ikke-BMP Unicode-tegn i faktisk brug? .