MySQL 8.4 发行说明
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 命令行客户端”。