UTF-8 là một mã hóa có độ dài thay đổi. Trong trường hợp UTF-8, điều này có nghĩa là việc lưu trữ một điểm mã yêu cầu một đến bốn byte. Tuy nhiên, mã hóa của MySQL có tên là "utf8" (bí danh của "utf8mb3") chỉ lưu trữ tối đa ba byte cho mỗi điểm mã.
Vì vậy, bộ ký tự "utf8" / "utf8mb3" không thể lưu trữ tất cả các điểm mã Unicode: nó chỉ hỗ trợ phạm vi 0x000 đến 0xFFFF, được gọi là " Mặt phẳng đa ngôn ngữ cơ bản ". Xem thêm So sánh các bảng mã Unicode .
Đây là những gì (phiên bản trước của cùng một trang tại) tài liệu MySQL phải nói về nó:
Bộ ký tự có tên utf8 [/ utf8mb3] sử dụng tối đa ba byte cho mỗi ký tự và chỉ chứa các ký tự BMP. Kể từ MySQL 5.5.3, bộ ký tự utf8mb4 sử dụng tối đa bốn byte cho mỗi ký tự hỗ trợ các ký tự bổ sung:
Đối với một ký tự BMP, utf8 [/ utf8mb3] và utf8mb4 có các đặc điểm lưu trữ giống hệt nhau: cùng một giá trị mã, cùng mã hóa, cùng độ dài.
Đối với một ký tự bổ sung, utf8 [/ utf8mb3] hoàn toàn không thể lưu trữ ký tự đó , trong khi utf8mb4 yêu cầu bốn byte để lưu trữ nó. Vì utf8 [/ utf8mb3] hoàn toàn không thể lưu trữ ký tự, nên bạn không có bất kỳ ký tự bổ sung nào trong các cột utf8 [/ utf8mb3] và bạn không cần lo lắng về việc chuyển đổi ký tự hoặc mất dữ liệu khi nâng cấp dữ liệu utf8 [/ utf8mb3] từ các phiên bản cũ hơn của MySQL.
Vì vậy, nếu bạn muốn cột của mình hỗ trợ lưu trữ các ký tự nằm ngoài BMP (và bạn thường muốn), chẳng hạn như biểu tượng cảm xúc , hãy sử dụng "utf8mb4". Xem thêm Các ký tự Unicode không BMP phổ biến nhất trong sử dụng thực tế là gì? .