Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


12.10.8 二进制字符集

binary 字符集是二进制字符串的字符集,二进制字符串是一系列字节。binary 字符集有一个排序规则,也就是 binary 排序规则。比较和排序基于数字字节值,而不是基于数字字符代码值(对于多字节字符不同于数字字节值)。关于binary 排序规则与非二进制字符集的<_bin 排序规则之间的差异,见第12.8.5节,“The binary Collation Compared to _bin Collations”

对于binary 字符集,字母大小写和音调等价概念不适用:

  • 对于单字节字符存储为二进制字符串,字符和字节边界相同,所以字母大小写和音调差异在比较中是有意义的。也就是说binary 排序规则是大小写敏感的也是音调敏感的。

    Press CTRL+C to copy
    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 | +---------------+------------+
  • 对于多字节字符存储为二进制字符串,字符和字节边界不同。字符边界丢失,所以依赖它们的比较不具意义。

要对二进制字符串进行字母大小写转换,首先将其转换到非二进制字符串使用适合存储在字符串中的字符集:

Press CTRL+C to copy
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 | +-------------+------------------------------------+

将字符串表达式转换为二进制字符串,这些构造是等价的:

Press CTRL+C to copy
BINARY expr CAST(expr AS BINARY) CONVERT(expr USING BINARY)

如果值是一个字符字符串字面量,_binary 引导符可以用来指定它为二进制字符串。例如:

Press CTRL+C to copy
_binary 'a'

《binary》引导符允许用于十六进制字面量和位值字面量,但多余;这些字面量默认为二进制字符串。

关于引导符的更多信息,请参见第12.3.8节,“字符集引导符”

Note

mysql 客户端中,二进制字符串使用十六进制表示法,取决于--binary-as-hex 选项的值。关于该选项的更多信息,请参见第6.5.1节,“mysql — MySQL 命令行客户端”