Documentation Home

10.10.8 二进制字符集

字符集是二进制字符串的binary字符集,二进制字符串是字节序列。字符集 binary有一个排序规则,也称为binary. 比较和排序基于数字字节值,而不是数字字符代码值(多字节字符不同于数字字节值)。有关字符集排序规则与非二进制字符集排序规则之间差异的信息 , binary请 参阅第 10.8.5 节,“二进制排序规则与 _bin 排序规则的比较”binary_bin

对于binary字符集,lettercase 和 accent equivalence 的概念不适用:

  • 对于存储为二进制字符串的单字节字符,字符和字节边界是相同的,因此字母大小写和重音差异在比较中很重要。也就是说,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十六进制文字和位值文字也允许介绍人,但不是必需的 ;默认情况下,此类文字是二进制字符串。

有关介绍人的更多信息,请参阅 第 10.3.8 节,“字符集介绍人”

笔记

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