1. Giới thiệu
MySQL là một trong những hệ quản trị cơ sở dữ liệu được sử dụng rộng rãi nhất, và trong số các tính năng chủ chốt, cài đặt Collation đóng vai trò quan trọng trong việc xác định cách dữ liệu chuỗi được so sánh và sắp xếp.
Tầm quan trọng của Collation
Nếu không có cài đặt collation đúng, kết quả tìm kiếm có thể sai lệch hoặc hiệu suất của cơ sở dữ liệu có thể giảm. Điều này trở nên đặc biệt quan trọng trong các hệ thống đa ngôn ngữ, nơi so sánh ký tự chính xác và tìm kiếm chính xác là rất quan trọng.
Bài viết này giải thích chi tiết về collation MySQL—cấu hình, các loại và các lưu ý chính—để giúp bạn quản lý cơ sở dữ liệu một cách hiệu quả hơn.
2. Collation là gì?
Collation định nghĩa các quy tắc MySQL sử dụng để so sánh và sắp xếp các giá trị chuỗi.
Vai trò của Collation
- Sắp xếp chuỗi: Xác định cách sắp xếp chuỗi.
- So sánh chuỗi: Được sử dụng trong các biểu thức như
WHERE name = 'Sagawa'. - Độ chính xác tìm kiếm: Tác động đến tính tương thích đa ngôn ngữ.
Mối quan hệ với Bộ ký tự
Collation liên quan chặt chẽ với bộ ký tự. Ví dụ, bộ ký tự utf8 bao gồm các collation sau:
utf8_general_ci: So sánh không phân biệt chữ hoa/thường.utf8_bin: So sánh theo nhị phân (phân biệt chữ hoa/thường).
Quy ước đặt tên
character_set_name_comparison_method
Ví dụ:
utf8_general_ci: Không phân biệt chữ hoa/thường (ci= case insensitive).utf8_bin: So sánh nhị phân.
3. Các cấp độ Collation trong MySQL
MySQL cho phép thiết lập collation ở năm cấp độ:
Cấp độ Máy chủ
SHOW VARIABLES LIKE 'collation_server';
Để thay đổi, chỉnh sửa my.cnf và khởi động lại máy chủ:
[mysqld]
collation_server=utf8mb4_unicode_ci
Cấp độ Cơ sở dữ liệu
ALTER DATABASE db_name DEFAULT COLLATE utf8mb4_unicode_ci;
Cấp độ Bảng
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Cấp độ Cột
ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR(255) COLLATE utf8mb4_unicode_ci;
Cấp độ Hằng chuỗi
SELECT * FROM table_name WHERE column_name = 'value' COLLATE utf8mb4_bin;
4. Các loại Collation chính và đặc điểm của chúng
utf8_general_ci
- Tính năng: So sánh không phân biệt chữ hoa/thường và nhanh.
- Lưu ý: Ít chính xác hơn; không hoàn toàn tuân thủ Unicode.
utf8_unicode_ci
- Tính năng: So sánh có độ chính xác cao dựa trên tiêu chuẩn Unicode.
- Lưu ý: Thời gian xử lý hơi lâu hơn
utf8_general_ci.
utf8_bin
- Tính năng: Phân biệt chữ hoa/thường; yêu cầu khớp chính xác.
- Ứng dụng: Mật khẩu và các định danh.
utf8mb4_unicode_ci
- Tính năng: Tuân thủ tiêu chuẩn Unicode hiện đại; hỗ trợ nhiều ngôn ngữ.
- Ứng dụng: Ứng dụng xử lý emoji và các ký hiệu đặc biệt.
5. Cách kiểm tra và thay đổi Collation
Bạn có thể kiểm tra hoặc thay đổi collation ở cấp độ cơ sở dữ liệu, bảng, hoặc cột.
Kiểm tra Collation
Collation Cơ sở dữ liệu
SELECT SCHEMA_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = 'database_name';
Collation Bảng
SHOW TABLE STATUS WHERE Name = 'table_name';
Collation Cột
SHOW FULL COLUMNS FROM table_name;
Thay đổi Collation
Cơ sở dữ liệu
ALTER DATABASE database_name
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
Bảng
ALTER TABLE table_name
CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Cột
ALTER TABLE table_name
MODIFY COLUMN column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Thay đổi Collation tạm thời
Khi so sánh các cột có collation khác nhau, hãy sử dụng mệnh đề COLLATE để tránh lỗi.
SELECT * FROM table_name
WHERE column1 COLLATE utf8mb4_unicode_ci = column2;
Luôn sao lưu dữ liệu và kiểm tra tính tương thích của ứng dụng trước khi thực hiện thay đổi.

6. Lưu ý và thực tiễn tốt nhất
Khi cấu hình collation trong MySQL, hãy cân nhắc các biện pháp phòng ngừa và thực tiễn sau đây để đảm bảo hiệu suất tối ưu.
Lưu Ý Quan Trọng
Trộn Nhiều Collation Khác Nhau
So sánh hoặc kết hợp các cột với các collation khác nhau có thể gây ra lỗi.
- Ví dụ lỗi:
ERROR 1267 (HY000): Illegal mix of collations for operation '='
- Giải pháp: Sử dụng mệnh đề
COLLATEđể đồng bộ collation.
SELECT * FROM table_name
WHERE column1 COLLATE utf8mb4_unicode_ci = column2;
Thay Đổi Collation và Dữ Liệu Hiện Có
Thay đổi collation có thể ảnh hưởng đến cách dữ liệu hiện có được so sánh hoặc tìm kiếm.
Ảnh Hưởng Đến Hiệu Suất
utf8mb4_unicode_cichính xác hơn nhưng chậm hơnutf8_general_ci.- Đối với bộ dữ liệu lớn, sự lựa chọn collation có thể tác động đáng kể tới tốc độ truy vấn.
Vấn Đề Di Migrate
Đảm bảo tính tương thích với ứng dụng và các hệ thống khác khi sửa đổi collation.
Thực Hành Tốt Nhất
1. Chọn Collation Dựa Trên Yêu Cầu
- Độ chính xác: Sử dụng
utf8_unicode_cihoặcutf8mb4_unicode_cicho so sánh chính xác. - Hiệu suất: Sử dụng
utf8_general_cicho so sánh nhanh hơn khi độ chính xác không quan trọng. - Hỗ trợ đa ngôn ngữ: Ưu tiên collation dựa trên
utf8mb4cho emoji và ký tự đặc biệt.
2. Duy Trì Tính Nhất Quán
- Sử dụng cùng một collation trên các cơ sở dữ liệu, bảng và cột để tránh sai lệch.
- Áp dụng
COLLATEchỉ tạm thời nếu cần thiết.
3. Kiểm Tra và Sao Lưu Trước Khi Thay Đổi
- Kiểm tra các thay đổi cấu hình trong môi trường staging.
- Luôn sao lưu dữ liệu production trước khi áp dụng các chỉnh sửa.
4. Tối Ưu Hiệu Suất
- Sử dụng collation cao hiệu năng cho các cột truy vấn thường xuyên (ví dụ có chỉ mục).
- Điều chỉnh collation cho từng truy vấn nếu cần.
5. Sử Dụng Tiêu Chuẩn Unicode Mới Nhất
Đối với hệ thống đa ngôn ngữ, sử dụng utf8mb4_0900_ai_ci để đạt độ chính xác và tính tương thích tốt hơn.
7. Kết Luận
Collation MySQL xác định cách dữ liệu chuỗi được so sánh và sắp xếp trong cơ sở dữ liệu. Hướng dẫn này đã bao quát khái niệm, phương pháp cấu hình, các loại, và thực hành tốt nhất cho quản lý collation hiệu quả.
Điểm Nổi Bật
- Định nghĩa: Collation kiểm soát so sánh và sắp xếp chuỗi. Việc chọn đúng nâng cao độ chính xác và hiệu suất.
- Nhiều Cấp Độ: Collation có thể được thiết lập ở cấp độ server, database, table, column, và literal.
- Các Loại Chính: *
utf8_general_ci: Nhanh nhưng ít chính xác. *utf8_unicode_ci: Chính xác nhưng chậm. *utf8mb4_unicode_ci: Tuân thủ Unicode và hỗ trợ emoji. - Cấu Hình: Các ví dụ SQL để kiểm tra và sửa đổi collation đã được cung cấp.
- Thực Hành Tốt Nhất: Luôn kiểm tra và sao lưu trước khi thay đổi.
Tối Ưu Hóa Sử Dụng Collation
Collation trực tiếp ảnh hưởng đến hành vi so sánh và sắp xếp chuỗi. Bằng cách tuân thủ các phương pháp và thực hành tốt nhất được trình bày ở đây, bạn có thể duy trì cả độ chính xác và hiệu suất trong các hệ thống MySQL của mình.


