MySQL 9.0 发行说明
binary
字符集是二进制字符串的字符集,它是字节序列。binary
字符集有一种排序规则,也称为 binary
。比较和排序基于数字字节值,而不是数字字符代码值(对于多字节字符,数字字符代码值与数字字节值不同)。有关 binary
字符集的 binary
排序规则与非二进制字符集的 _bin
排序规则之间的区别的信息,请参阅第 12.8.5 节 “二进制排序规则与 _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 命令行客户端”。