10.10.8 二进制字符集

binary字符集是二进制字符串的字符集,二进制字符串是字节序列。 binary字符集具有一个排序规则,也称为binary。比较和排序基于数字字节值,而不是基于数字字符代码值(对于多字节字符,数字字符代码值不同于数字字节值)。有关binary字符集的binary归类和非二进制字符集的_bin归类之间的区别的信息,请参见第 10.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                           |
+-------------+------------------------------------+

要将字符串 table 达式转换为二进制字符串,这些结构是等效的:

BINARY expr
CAST(expr AS BINARY)
CONVERT(expr USING BINARY)

如果值是字符串 Literals,则可以使用_binary引入程序将其指定为二进制字符串。例如:

_binary 'a'

十六进制 Literals 和位值 Literals 也可以使用_binary引入程序,但这不是必需的;这样的 Literals 默认情况下是二进制字符串。

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