MySQL 8.3 Release Notes
二进制字符集是二进制字符串的字符集,二进制字符串是字节序列。二进制字符集只有一个排序规则,也名为二进制。比较和排序基于数字字节值,而不是基于数字字符代码值(对于多字节字符,数字字节值与数字字符代码值不同)。关于二进制字符集的二进制排序规则与非二进制字符集的_bin排序规则的区别,请参阅第 12.8.5 节,“二进制排序规则与_bin排序规则的比较”。
对于二进制字符集,字母大小写和音调等效不适用:
-
对于以二进制字符串形式存储的单字节字符,字符边界和字节边界相同,因此字母大小写和音调差异在比较中是重要的。也就是说,二进制排序规则区分大小写和音调。
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 'a'
二进制引入符也可以用于十六进制文字和位值文字,但这不是必需的;这些文字默认是二进制字符串。
有关引入符的更多信息,请参阅第 12.3.8 节,“字符集引入符”。
Note
在mysql 客户端中,二进制字符串以十六进制表示,取决于--binary-as-hex
选项的值。有关该选项的更多信息,请参阅第 6.5.1 节,“mysql — MySQL 命令行客户端”。