字符集是一套符號和編碼。校對規則是在字符集內用於比較字符的一套規則。讓我們使用一個假想字符集的例子來區別清楚。
假設我們有一個字母表使用了四個字母:‘A’、‘B’、‘a’、‘b’。我們為每個字母賦予一個數值:‘A’=0,‘B’= 1,‘a’= 2,‘b’= 3。字母‘A’是一個符號,數字0是‘A’的編碼,這四個字母和它們的編碼組合在一起是一個字符集。
假設我們希望比較兩個字符串的值:‘A’和‘B’。比較的最簡單的方法是查找編碼:‘A’為0,‘B’為1。因為0 小於1,我們可以說‘A’小於‘B’。我們做的僅僅是在我們的字符集上應用了一個 校對規則。校對規則是一套規則(在這種情況下僅僅是一套規則):“對編碼進行比較。”我們稱這種全部可能的規則中的最簡單的 校對規則為一個binary(二元)校對規則。
但是,如果我們希望小寫字母和大寫字母是等價的,應該怎樣?那麼,我們將至少有兩個規則:(1)把小寫字母‘a’和‘b’視為與‘A’和‘B’等價;(2)然後比較編碼。我們稱這是一個大小寫不敏感的 校對規則。比二元校對規則復雜一些。
在實際生活中,大多數字符集有許多字符:不僅僅是‘A’和‘B’,而是整個字母表,有時候有許多種字母表,或者一個東方的使用上千個字符的書寫系統,還有許多特殊符號和標點符號。並且在實際生活中,大多數 校對規則有許多個規則:不僅僅是大小寫不敏感,還包括重音符不敏感(“重音符” 是附屬於一個字母的符號,象德語的‘Ö’符號)和多字節映射(例如,作為規則‘Ö’=‘OE’就是兩個德語 校對規則的一種)。
MySQL5.1能夠做這些事情:
·使用多種字符集來存儲字符串
·使用多種校對規則來比較字符串
·在同一台服務器、同一個數據庫或甚至在同一個表中使用不同字符集或校對規則來混合字符串
·允許定義任何級別的字符集和校對規則
在這些方面,MySQL5.1不僅比MySQL4.1以前的版本靈活得多,而且比其它大多數數據庫管理系統超前許多。但是,為了有效地使用這些功能,你需要了解哪些字符集和 校對規則是可用的,怎樣改變默認值,以及它們怎樣影響字符操作符和字符串函數的行為。