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 từ một đến bốn byte. Tuy nhiên, mã hóa của MySQL được gọi 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ợ dải từ 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à nội dung (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 nhau:giá trị mã giống nhau, mã hóa giống nhau, cùng độ dài.
Đối với một ký tự phụ, 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ự, bạn không có bất kỳ ký tự bổ sung nào trong 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 bên ngoài BMP (và bạn thường muốn), chẳng hạn như biểu tượng cảm xúc , sử dụng "utf8mb4". Xem thêm Các ký tự Unicode không phải BMP phổ biến nhất trong sử dụng thực tế là gì? .