使用者定義的校對已遭棄用;您應預期在未來版本的 MySQL 中會移除對它們的支援。伺服器會針對 SQL 陳述式中任何使用 COLLATE
的情況發出警告;當伺服器啟動時,如果 user_defined_collation
--collation-server
設定為使用者定義的校對名稱,也會發出警告。
本節說明如何使用內建的全文剖析器,為全文檢索新增使用者定義的校對。範例校對類似於 latin1_swedish_ci
,但會將 '-'
字元視為字母,而不是標點符號,以便將其編製為單字字元。關於新增校對的一般資訊,請參閱 第 12.14 節,「為字元集新增校對」;假設您已閱讀過此節,並且熟悉相關的檔案。
若要新增用於全文索引的校對,請使用下列程序。此處的說明新增的是針對簡單字元集的校對,如 第 12.14 節,「為字元集新增校對」中所述,可以使用描述字元集屬性的組態檔建立。對於複雜的字元集 (例如 Unicode),請使用描述字元集屬性的 C 原始程式碼檔案來建立校對。
將校對新增至
Index.xml
檔案。使用者定義校對的允許 ID 範圍,請參閱 第 12.14.2 節,「選擇校對 ID」。ID 必須未使用,因此如果您的系統中已採用 ID 1025,請選擇與其不同的值。<charset name="latin1"> ... <collation name="latin1_fulltext_ci" id="1025"/> </charset>
在
latin1.xml
檔案中宣告校對的排序順序。在此範例中,順序可以從latin1_swedish_ci
複製。<collation name="latin1_fulltext_ci"> <map> 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF 41 41 41 41 5C 5B 5C 43 45 45 45 45 49 49 49 49 44 4E 4F 4F 4F 4F 5D D7 D8 55 55 55 59 59 DE DF 41 41 41 41 5C 5B 5C 43 45 45 45 45 49 49 49 49 44 4E 4F 4F 4F 4F 5D F7 D8 55 55 55 59 59 DE FF </map> </collation>
修改
latin1.xml
中的ctype
陣列。將對應於 0x2D (這是'-'
字元的代碼) 的值從 10 (標點符號) 變更為 01 (大寫字母)。在下列陣列中,這是從下數來第四列、從結尾數來第三個值中的元素。<ctype> <map> 00 20 20 20 20 20 20 20 20 20 28 28 28 28 28 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48 10 10 10 10 10 10 10 10 10 10 10 10 01 10 10 84 84 84 84 84 84 84 84 84 84 10 10 10 10 10 10 10 81 81 81 81 81 81 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 10 10 10 10 10 10 82 82 82 82 82 82 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 10 10 10 10 20 10 00 10 02 10 10 10 10 10 10 01 10 01 00 01 00 00 10 10 10 10 10 10 10 10 10 02 10 02 00 02 01 48 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 10 01 01 01 01 01 01 01 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 10 02 02 02 02 02 02 02 02 </map> </ctype>
重新啟動伺服器。
若要使用新的校對,請將其納入要使用該校對的欄定義中。
mysql> DROP TABLE IF EXISTS t1; Query OK, 0 rows affected (0.13 sec) mysql> CREATE TABLE t1 ( a TEXT CHARACTER SET latin1 COLLATE latin1_fulltext_ci, FULLTEXT INDEX(a) ) ENGINE=InnoDB; Query OK, 0 rows affected (0.47 sec)
測試校對,以驗證連字號是否被視為單字字元。
mysql> INSERT INTO t1 VALUEs ('----'),('....'),('abcd'); Query OK, 3 rows affected (0.22 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM t1 WHERE MATCH a AGAINST ('----' IN BOOLEAN MODE); +------+ | a | +------+ | ---- | +------+ 1 row in set (0.00 sec)