Character Set và Collation trong MySQL là hai khái niệm liên quan đến cách lưu trữ và xử lý dữ liệu văn bản trong cơ sở dữ liệu.
1. Character Set (Bộ ký tự)
- Định nghĩa: Character set (bộ ký tự) xác định tập hợp các ký tự mà cơ sở dữ liệu có thể lưu trữ. Mỗi ký tự được ánh xạ thành một giá trị mã số (code point).
- Ví dụ:
- utf8: Bộ ký tự mã hóa Unicode sử dụng từ 1-3 byte cho mỗi ký tự.
- utf8mb4: Phiên bản mở rộng của utf8, hỗ trợ đầy đủ các ký tự Unicode (bao gồm emoji).
- latin1: Bộ ký tự một byte, hỗ trợ các ký tự từ tiếng Anh và một số ngôn ngữ Tây Âu.
- Khi nào sử dụng?
- Nếu bạn cần lưu trữ dữ liệu đa ngôn ngữ, như tiếng Việt hoặc các ký tự đặc biệt (emoji), nên sử dụng utf8mb4.
- Nếu chỉ lưu trữ văn bản tiếng Anh hoặc ngôn ngữ có ký tự đơn giản, có thể sử dụng latin1 để tiết kiệm dung lượng.
2. Collation (So sánh ký tự)
- Định nghĩa: Collation (đối chiếu ký tự) xác định cách sắp xếp và so sánh các ký tự trong một character set. Nó quy định thứ tự sắp xếp (sorting order) và cách xử lý khi so sánh (case-sensitive hoặc case-insensitive).
- Ví dụ:
- utf8_general_ci:
- ci là viết tắt của case-insensitive (không phân biệt hoa/thường).
- Ký tự a và A được xem là giống nhau khi so sánh.
- utf8_bin:
- So sánh nhị phân, phân biệt chính xác từng ký tự dựa trên giá trị nhị phân (case-sensitive).
- utf8_unicode_ci:
- Sắp xếp và so sánh dựa trên tiêu chuẩn Unicode.
- utf8_general_ci:
3. Mối quan hệ giữa Character Set và Collation
- Mỗi Character Set sẽ có một hoặc nhiều Collation tương ứng.
- Khi tạo cơ sở dữ liệu, bảng hoặc cột, bạn cần xác định cả Character Set và Collation nếu muốn tùy chỉnh.
- Mặc định:
- Nếu không chỉ định, MySQL sẽ sử dụng character set và collation mặc định của server (utf8mb4 và utf8mb4_0900_ai_ci trong các phiên bản MySQL mới).
4. Cách kiểm tra và thiết lập
- Kiểm tra character set và collation hiện tại:
SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%';
- Thiết lập character set và collation cho database:
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- Thiết lập cho một bảng:
CREATE TABLE mytable ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) ) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- Thiết lập cho một cột:
CREATE TABLE mytable ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin );
5. Tóm lại
- Character Set: Định nghĩa tập hợp ký tự (tiếng Anh, tiếng Việt, emoji, Unicode, v.v.) có thể lưu trữ.
- Collation: Định nghĩa cách so sánh và sắp xếp ký tự (phân biệt hay không phân biệt hoa/thường, theo thứ tự Unicode, v.v.).
- Chọn đúng character set và collation là rất quan trọng để tránh lỗi mã hóa và đảm bảo tính chính xác khi xử lý dữ liệu đa ngôn ngữ.
Nếu bạn làm việc với tiếng Việt, nên dùng utf8mb4 và utf8mb4_unicode_ci để đảm bảo lưu trữ và xử lý đúng các ký tự đặc biệt.
Xem thêm: