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 (і зазвичай ви хочете), наприклад, Emoji , використання «utf8mb4». Див. Також Які найпоширеніші символи Unicode, що не належать до BMP, фактично використовуються? .