使用者定義的校對已棄用;您應該預期在未來版本的 MySQL 中將移除對它們的支援。MySQL 8.4 伺服器會針對 SQL 陳述式中任何使用 COLLATE
的情況發出警告;當伺服器啟動時,如果 user_defined_collation
--collation-server
設定為等於使用者定義校對的名稱,也會發出警告。
校對是一組規則,定義如何比較和排序字串。MySQL 中的每個校對都屬於單一字元集。每個字元集至少有一個校對,大多數都有兩個或多個校對。
校對根據權重對字元進行排序。字元集中的每個字元都對應到一個權重。權重相等的字元比較為相等,權重不相等的字元則根據其權重的相對大小進行比較。
可以使用 WEIGHT_STRING()
函數來檢視字串中字元的權重。它傳回的權重值是二進制字串,因此方便使用 HEX(WEIGHT_STRING(
以可列印的形式顯示權重。以下範例顯示,如果 str
))'AaBb'
是非二進制不區分大小寫的字串,則其字母的大小寫權重不會不同,但如果是二進制字串則會不同
mysql> SELECT HEX(WEIGHT_STRING('AaBb' COLLATE latin1_swedish_ci));
+------------------------------------------------------+
| HEX(WEIGHT_STRING('AaBb' COLLATE latin1_swedish_ci)) |
+------------------------------------------------------+
| 41414242 |
+------------------------------------------------------+
mysql> SELECT HEX(WEIGHT_STRING(BINARY 'AaBb'));
+-----------------------------------+
| HEX(WEIGHT_STRING(BINARY 'AaBb')) |
+-----------------------------------+
| 41614262 |
+-----------------------------------+
MySQL 支援多種校對實作,如第 12.14.1 節,「校對實作類型」所述。其中某些實作可以新增至 MySQL,而無需重新編譯
8 位元字元集的簡單校對。
Unicode 字元集的 UCA 型校對。
二進制 (
) 校對。xxx
_bin
以下章節說明如何將前兩種型別的使用者定義校對新增至現有的字元集。所有現有的字元集都已具有二進制校對,因此這裡無需說明如何新增二進制校對。
不支援重新定義內建校對,這可能會導致非預期的伺服器行為。
新增新的使用者定義校對的程序摘要
選擇校對 ID。
新增組態資訊,以命名校對並描述字元排序規則。
重新啟動伺服器。
確認伺服器可識別校對。
此處的指示僅涵蓋無需重新編譯 MySQL 即可新增的使用者定義校對。若要新增需要重新編譯的校對 (藉由 C 原始程式檔中的函數實作),請使用第 12.13 節,「新增字元集」中的指示。但是,請勿新增完整字元集所需的所有資訊,而只需修改現有字元集的適當檔案。也就是說,根據字元集目前校對已有的內容,為新的校對新增資料結構、函數和組態資訊。
如果您修改現有的使用者定義校對,可能會影響使用該校對的欄位索引之資料列排序。在這種情況下,請重建任何此類索引,以避免諸如不正確的查詢結果等問題。請參閱第 3.14 節,「重建或修復表格或索引」。
其他資源
範例顯示如何為全文搜尋新增校對:第 14.9.7 節,「為全文索引新增使用者定義的校對」
Unicode 校對演算法 (UCA) 規格:http://www.unicode.org/reports/tr10/
地區設定資料標記語言 (LDML) 規格:http://www.unicode.org/reports/tr35/