字元集是一組符號和編碼。排序規則是一組用於比較字元集中字元的規則。讓我們用一個虛構的字元集範例來清楚說明它們之間的區別。
假設我們有一個包含四個字母的字母表: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
。我們剛才所做的是對我們的字元集套用排序規則。排序規則是一組規則(在本例中只有一條規則):「比較編碼。」我們將這種最簡單的排序規則稱為二進位排序規則。
但是,如果我們想要說小寫字母和大寫字母是相等的呢?那麼我們至少需要兩條規則:(1) 將小寫字母 a
和 b
視為與 A
和 B
相等;(2) 然後比較編碼。我們稱之為不區分大小寫的排序規則。它比二進位排序規則稍微複雜一些。
在現實生活中,大多數字元集都有許多字元:不僅僅是 A
和 B
,而是整個字母表,有時是多個字母表或具有數千個字元的東方書寫系統,以及許多特殊符號和標點符號。在現實生活中,大多數排序規則都有許多規則,不僅僅是是否區分字母大小寫,還包括是否區分重音符號(「重音符號」是指附加到字元的標記,如德語 Ö
),以及多字元對應(例如在其中一種德語排序規則中,Ö
= OE
的規則)。
MySQL 可以為您完成以下事項
使用各種字元集儲存字串。
使用各種排序規則比較字串。
在同一個伺服器、同一個資料庫甚至同一個表格中混合使用具有不同字元集或排序規則的字串。
啟用在任何層級指定字元集和排序規則。
若要有效使用這些功能,您必須知道有哪些字元集和排序規則可用、如何變更預設值,以及它們如何影響字串運算子和函式的行為。