Character set và collation

MySQL

Các database được sử dụng để lưu trữ dữ liệu, trong đó character set và collation chính là các “nguyên liệu” để tạo nên dữ liệu. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về 2 thành phần quan trọng này.

Character set và Collation là gì?

Character set là 1 tập hợp các ký tự và mã hóa (encoding). Collation là 1 tập hợp các luật dùng để so sánh các ký tự trong character set.

Ví dụ về character set

Giả sử chúng ta có 1 bảng chữ cái với 4 ký tự: A, B, a, b. Chúng ta đánh số cho các ký tự này lần lượt là: A = 0, B = 1, a = 2, b = 3. Khi đó, chữ cái A là 1 ký tự, và số 0 là mã hóa của A. Kết hợp tất cả 4 ký tự với các mã hóa của chúng, chúng ta có khái niệm character set.

Ví dụ về collation

Giả sử chúng ta muốn so sánh 2 chuỗi AB. Cách đơn giản nhất để làm việc này là dựa vào các mã hóa: 0 cho A1 cho B. Vì 0 < 1, nên chúng ta kết luận rằng A nhỏ hơn B. Vừa rồi chúng ta đã áp dụng 1 luật so sánh cho character set chúng ta, việc đối chiếu này được gọi là collation. Về bản chất, collation là tập hợp các luật dùng để so sánh các giá trị mã hóa của 1 character set. Ở ví dụ này, chúng ta chỉ sử dụng 1 luật để so sánh 2 chuỗi A và B, các đối chiếu ở mức đơn giản nhất này (chỉ áp dụng 1 luật khi so sánh) được gọi là các đối chiếu nhị phân (binary collation).

Ở 1 ví dụ khác, nếu chúng ta muốn nói rằng các ký tự viết thường (lowercase) và viết hoa (uppercase) là như nhau, thì chúng ta có ít nhất 2 rule: (1) Xem các ký tự thường a và b tương tự với A và B; (2) sau đó so sánh các mã hóa (encoding). Chúng ta gọi đây là đối chiếu không phân biệt chữ hoa chữ thường (case-insensitive collation). Đối chiếu này phức tạp hơn so với các đối chiếu nhị phân.

Trong thực tế, các character set có nhiều ký tự: không chỉ có A và B mà còn cả bảng chữ cái, đôi khi nhiều bảng chữ cái hoặc hệ thống chữ viết, cùng với nhiều ký hiệu và dấu chấm câu đặc biệt.

Ngoài ra, trong cuộc sống thực, hầu hết các collation đều có nhiều quy tắc, không chỉ về việc có nên phân biệt các chữ cái hay không, mà còn để phân biệt các dấu (một dấu trọng âm là một dấu gắn liền với một ký tự như trong tiếng Đức) và cho ánh xạ nhiều ký tự (chẳng hạn như quy tắc Ö = OE trong tiếng Đức).

Trong MySQL, chúng ta có thể làm những việc sau với character set và collation :

  • Lưu trữ các chuỗi sử dụng nhiều character set khác nhau.
  • So sánh chuỗi sử dụng nhiều collation khác nhau.
  • Trộn các chuỗi với character set hay collation khác nhau trong cùng 1 server, cùng 1 database, hay thậm chí cùng 1 table.
  • Cho phép chỉ định character set và collation tại bất cứ level nào.

Để sử dụng hiệu quả những tính năng này, chúng ta cần phải biết những character set và collation nào đang có, làm sao để thay đổi cấu hình mặc định của character set và collation trên server, và làm sao để phản ánh hành vi của các toán tử chuỗi và các chức năng chuỗi.

Chúng ta kết thúc bài viết tìm hiểu về character set và collation tại đây. Ở bài viết tiếp theo, chúng ta sẽ cùng tìm hiểu chi tiết hơn về character set và collation trong MySQL.

Related Post