MySQL 9.0 版本注意事項
binary
字元集是二進位字串的字元集,也就是位元組序列。binary
字元集有一個校對,也命名為 binary
。比較和排序是根據數值位元組值,而不是根據數值字元碼值(多位元組字元的數值字元碼值與數值位元組值不同)。如需了解 binary
字元集的 binary
校對與非二進位字元集的 _bin
校對之間差異的相關資訊,請參閱第 12.8.5 節「binary 校對與 _bin 校對的比較」。
對於 binary
字元集,大小寫和重音等效的概念不適用
對於以二進位字串儲存的單位元組字元,字元和位元組邊界相同,因此在比較中,大小寫和重音差異很重要。也就是說,
binary
校對區分大小寫且區分重音。mysql> SET NAMES 'binary'; mysql> SELECT CHARSET('abc'), COLLATION('abc'); +----------------+------------------+ | CHARSET('abc') | COLLATION('abc') | +----------------+------------------+ | binary | binary | +----------------+------------------+ mysql> SELECT 'abc' = 'ABC', 'a' = 'ä'; +---------------+------------+ | 'abc' = 'ABC' | 'a' = 'ä' | +---------------+------------+ | 0 | 0 | +---------------+------------+
對於以二進位字串儲存的多位元組字元,字元和位元組邊界不同。字元邊界會遺失,因此依賴它們的比較沒有意義。
若要執行二進位字串的大小寫轉換,請先使用適用於字串中儲存資料的字元集將其轉換為非二進位字串
mysql> SET @str = BINARY 'New York';
mysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING utf8mb4));
+-------------+------------------------------------+
| LOWER(@str) | LOWER(CONVERT(@str USING utf8mb4)) |
+-------------+------------------------------------+
| New York | new york |
+-------------+------------------------------------+
若要將字串運算式轉換為二進位字串,以下建構式是相等的
BINARY expr
CAST(expr AS BINARY)
CONVERT(expr USING BINARY)
如果值是字串常值,則可以使用 _binary
引導符將其指定為二進位字串。例如
_binary 'a'
十六進位常值和位元值常值也允許使用 _binary
引導符,但沒有必要;這些常值預設為二進位字串。
如需引導符的相關資訊,請參閱第 12.3.8 節「字元集引導符」。
注意
在 mysql 用戶端中,二進位字串會使用十六進位標記法顯示,這取決於 --binary-as-hex
的值。如需該選項的相關資訊,請參閱第 6.5.1 節「mysql — MySQL 命令列用戶端」。