使用者定義的校對已棄用;您應該預期它們在未來版本的 MySQL 中會移除支援。MySQL 9.0 伺服器會針對在 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/