Cập nhật ngày 10/11/2021
Lượt xem: 148
UTF-8 là một mã hóa có độ dài thay đổi. Bình thường UTF-8 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 utf8 (bí danh của utf8mb3) của MySQL 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).
Tài liệu MySQL 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ự và 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ự bổ sung, utf8/utf8mb3 hoàn toàn không thể lưu trữ ký tự , trong khi utf8mb4 có thể lưu trữ. 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 bên ngoài BMP, chẳng hạn như biểu tượng cảm xúc, hãy sử dụng utf8mb4.