UTF-8 е кодиране с променлива дължина. В случая с UTF-8 това означава, че съхраняването на една кодова точка изисква един до четири байта. Въпреки това, кодирането на MySQL, наречено "utf8" (псевдоним на "utf8mb3"), съхранява само максимум три байта на кодова точка.
Така наборът от знаци "utf8"/"utf8mb3" не може да съхранява всички кодови точки на Unicode:той поддържа само диапазона от 0x000 до 0xFFFF, който се нарича "Основна многоезична равнина ".Вижте също Сравнение на Unicode кодировки .
Ето какво (предишна версия на същата страница на адрес) документацията на MySQL трябва да кажа за това:
Наборът от знаци с име utf8[/utf8mb3] използва максимум три байта на знак и съдържа само BMP знаци. От MySQL 5.5.3, наборът от символи utf8mb4 използва максимум четири байта на знак, поддържа допълнителни знаци:
За BMP символ, utf8[/utf8mb3] и utf8mb4 имат идентични характеристики за съхранение:едни и същи стойности на кода, същото кодиране, същата дължина.
За допълнителен знак utf8[/utf8mb3] изобщо не може да съхранява знака , докато utf8mb4 изисква четири байта, за да го съхранява. Тъй като utf8[/utf8mb3] изобщо не може да съхранява символа, нямате допълнителни знаци в колоните utf8[/utf8mb3] и не е нужно да се притеснявате за конвертиране на знаци или загуба на данни при надграждане на utf8[/utf8mb3] данни от по-стари версии на MySQL.
Така че, ако искате колоната ви да поддържа съхраняване на знаци, разположени извън BMP (а обикновено искате), като емоджи , използвайте "utf8mb4". Вижте също Кои са най-често използваните символи, различни от BMP Unicode? .