UTF-8 là gì? Sự khác nhau giữa UTF8BM3 với UTF8BM4 trong MySQL
Trong khi thiết lập cấu hình cho Mysql database chắc hẳn bạn cũng sẽ có thắc mắc là: UTF-8 là gì? Sự khác nhau giữa UTF8BM3
với UTF8BM4
trong MySQL . Sao lại có 2 lựa chọn bộ mã hóa UTF-8 trong thiết lập của MySQL. Sau đây mình xin giải đáp thắc mắc và cũng chia sẻ với các bạn về 2 bộ mã UTF-8 và UTF8BM4
của MySQL .
UTF-8 là gì?
UTF-8 (8-bit Unicode Transformation Format – Định dạng chuyển đổi Unicode 8-bit) là một bộ mã hóa ký tự với chiều rộng biến thiên dành cho Unicode
Theo wikipedia
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
UTF8BM3 và UTF8BM4 là gì?
UTF8BM4
: Mã hóa UTF-8 của bộ ký tự Unicode sử dụng một đến bốn byte cho mỗi ký tự.UTF8BM3
: Mã hóa UTF-8 của bộ ký tự Unicode sử dụng một đến ba byte cho mỗi ký tự.
Sự khác nhau khi sử dụng 2 bộ mã UTF8BM3 và UTF8BM4
Bộ ký tự có tên 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,
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,
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ì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ộtutf8mb3
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ệuutf8mb3
từ các phiên bản cũ hơn của MySQL vìutf8mb4
tương thích hoàn toàn khi chuyển từutf8mb3
sang.
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 , 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ì? .