UTF-8 to kodowanie o zmiennej długości. W przypadku UTF-8 oznacza to, że przechowywanie jednego punktu kodowego wymaga od jednego do czterech bajtów. Jednak kodowanie MySQL o nazwie "utf8" (alias "utf8mb3") przechowuje tylko maksymalnie trzy bajty na punkt kodowy.
Tak więc zestaw znaków „utf8”/„utf8mb3” nie może przechowywać wszystkich punktów kodowych Unicode:obsługuje tylko zakres od 0x000 do 0xFFFF, który nazywa się „Podstawowa płaszczyzna wielojęzyczna ".Zobacz także Porównanie kodowań Unicode .
Oto co (poprzednia wersja tej samej strony pod adresem) dokumentacja MySQL musi o tym powiedzieć:
Zestaw znaków o nazwie utf8[/utf8mb3] wykorzystuje maksymalnie trzy bajty na znak i zawiera tylko znaki BMP. Od MySQL 5.5.3 zestaw znaków utf8mb4 używa maksymalnie czterech bajtów na znak, obsługuje znaki uzupełniające:
-
Dla znaku BMP, utf8[/utf8mb3] i utf8mb4 mają identyczne właściwości przechowywania:te same wartości kodu, to samo kodowanie, ta sama długość.
-
W przypadku dodatkowego znaku utf8[/utf8mb3] nie może w ogóle przechowywać znaku , podczas gdy utf8mb4 wymaga czterech bajtów do jego przechowywania. Ponieważ utf8[/utf8mb3] nie może w ogóle przechowywać znaku, nie masz żadnych dodatkowych znaków w kolumnach utf8[/utf8mb3] i nie musisz się martwić o konwersję znaków lub utratę danych podczas aktualizacji danych utf8[/utf8mb3] ze starszych wersji MySQL.
Więc jeśli chcesz, aby Twoja kolumna obsługiwała przechowywanie znaków spoza BMP (a zazwyczaj chcesz), na przykład emotikony , użyj „utf8mb4”. Zobacz także Jakie są najczęściej używane znaki Unicode inne niż BMP? .