文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  字串搜尋中的大小寫敏感性

B.3.4.1 字串搜尋中的大小寫敏感性

對於非二進位字串 (CHARVARCHARTEXT),字串搜尋會使用比較運算元的校對。對於二進位字串 (BINARYVARBINARYBLOB),比較會使用運算元中位元組的數值;這表示對於字母字元,比較會區分大小寫。

非二進位字串和二進位字串之間的比較會視為二進位字串的比較。

簡單的比較運算 (>=、>、=、<、<=、排序和分組) 是根據每個字元的排序值。排序值相同的字元會視為相同的字元。例如,如果 eé 在給定的校對中具有相同的排序值,則它們的比較會相等。

預設字元集和校對為 utf8mb4utf8mb4_0900_ai_ci,因此預設情況下,非二進位字串比較不區分大小寫。這表示如果您使用 col_name LIKE 'a%' 搜尋,您會取得所有以 Aa 開頭的資料行值。若要使此搜尋區分大小寫,請確定其中一個運算元具有區分大小寫或二進位的校對。例如,如果您比較一個資料行和一個字串,這兩者都具有 utf8mb4 字元集,您可以使用 COLLATE 運算子,讓任一個運算元具有 utf8mb4_0900_as_csutf8mb4_bin 校對

col_name COLLATE utf8mb4_0900_as_cs LIKE 'a%'
col_name LIKE 'a%' COLLATE utf8mb4_0900_as_cs
col_name COLLATE utf8mb4_bin LIKE 'a%'
col_name LIKE 'a%' COLLATE utf8mb4_bin

如果您希望資料行一律以區分大小寫的方式處理,請使用區分大小寫或二進位校對來宣告它。請參閱章節 15.1.20,「CREATE TABLE 陳述式」

若要使非二進位字串的區分大小寫比較不區分大小寫,請使用 COLLATE 來命名不區分大小寫的校對。下列範例中的字串通常區分大小寫,但 COLLATE 會將比較變更為不區分大小寫

mysql> SET NAMES 'utf8mb4';
mysql> SET @s1 = 'MySQL' COLLATE utf8mb4_bin,
           @s2 = 'mysql' COLLATE utf8mb4_bin;
mysql> SELECT @s1 = @s2;
+-----------+
| @s1 = @s2 |
+-----------+
|         0 |
+-----------+
mysql> SELECT @s1 COLLATE utf8mb4_0900_ai_ci = @s2;
+--------------------------------------+
| @s1 COLLATE utf8mb4_0900_ai_ci = @s2 |
+--------------------------------------+
|                                    1 |
+--------------------------------------+

二進位字串在比較中會區分大小寫。若要將字串比較為不區分大小寫,請將其轉換為非二進位字串,並使用 COLLATE 來命名不區分大小寫的校對

mysql> SET @s = BINARY 'MySQL';
mysql> SELECT @s = 'mysql';
+--------------+
| @s = 'mysql' |
+--------------+
|            0 |
+--------------+
mysql> SELECT CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql';
+----------------------------------------------------------------+
| CONVERT(@s USING utf8mb4) COLLATE utf8mb4_0900_ai_ci = 'mysql' |
+----------------------------------------------------------------+
|                                                              1 |
+----------------------------------------------------------------+

若要判斷值是以非二進位字串還是二進位字串比較,請使用 COLLATION() 函數。此範例顯示 VERSION() 傳回的字串具有不區分大小寫的校對,因此比較不區分大小寫

mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8mb3_general_ci   |
+----------------------+

對於二進位字串,校對值為 binary,因此比較會區分大小寫。您可能會看到 binary 的其中一種情況是壓縮函數,它們通常會傳回二進位字串:字串

mysql> SELECT COLLATION(COMPRESS('x'));
+--------------------------+
| COLLATION(COMPRESS('x')) |
+--------------------------+
| binary                   |
+--------------------------+

若要檢查字串的排序值,WEIGHT_STRING() 可能會很有用。請參閱章節 14.8,「字串函數和運算子」