10bet网址
MySQL 8.0参考手册
相关文件10bet官方网站 本手册下载 从本手册中摘录

10.8.5与_bin排列相比的二进制归类

本节介绍了如何二进制比较二进制字符串的排序规则_bin非二进制字符串的排序规则。

二进制字符串(使用使用存储二进制VARBINARY, 和斑点数据类型)有一个字符集和排序规则命名二进制.二进制字符串是字节序列,这些字节的数值决定比较和排序顺序。看到第10.10.8节“二进制字符集”

非二进制字符串(如使用charVARCHAR, 和文本数据类型)具有字符集和排序规则二进制.给定的非inary字符集可以具有多个排序组​​,每个结合定义了集合中字符的特定比较和排序顺序。对于大多数字符集,其中一个是二进制排序规则,由a表示_bin在排序规则中的后缀。例如,二进制融合为UTF8.latin1被称为utf8_binlatin1_bin,分别。utf8mb4是一个有两个二进制融合的例外,utf8mb4_binutf8mb4_0900_bin;看第10.10.1节," Unicode字符集"

二进制整理不同于_bin以下部分将讨论几个方面的排序:

用于比较和排序的单位

二进制字符串是字节的序列。为了二进制排序、比较和排序都基于数字字节值。非二进制字符串是字符序列,可能是多字节的。非二进制字符串的排序规则定义了用于比较和排序的字符值的顺序。为_bin排序规则,此排序基于数字字符代码值,类似于二进制字符串的排序,只是字符代码值可能是多字节的。

字符集转换

非线性字符串具有字符集,并且即使字符串具有一个情况,也会自动转换为在许多情况下设置的另一个字符_bin整理:

  • 将列值分配给具有不同字符集的另一列时:

    UPDATE t1 SET utf8_bin_column=latin1_column;INSERT INTO t1 (latin1_column) SELECT utf8_bin_column FROM t2;
  • 分配列值时或者更新使用字符串文字:

    设置名字latin1;中的一个插入T1(UTF8_BIN_COLUMN)值('String-in-latin1');
  • 将服务器从服务器发送到客户端时:

    设置名字latin1;中的一个SELECT utf8_bin_column FROM t2;

对于二进制字符串列,不发生转换。对于类似于上述情况的情况,将按字节顺序复制字符串值。

文书夹转换

非inary字符集的拼接提供有关字符的字母表的信息,因此非线性字符串中的字符可以从一个字段转换为另一个字段,即使是为了_bin忽略字母表订购的拼写:

mysql> SET NAMES utf8mb4 COLLATE utf8mb4_bin;mysql> SELECT LOWER('aA'), UPPER('zZ');+-------------+-------------+ | 低(aA) |上(“zZ ') | +-------------+-------------+ | aa | ZZ  | +-------------+-------------+

字母的概念不适用于二进制字符串中的字节。要执行字母转换,字符串必须首先使用与字符串中存储的数据相适应的字符集转换为非二进制字符串:

mysql> SET NAMES binary;mysql> SELECT * from ` aA `, ` aA ` from ` utf8mb4;+-------------+------------------------------------+ | 低(aA) |低(转换(使用utf8mb4“aA” )) | +-------------+------------------------------------+ | aA aA |  | +-------------+------------------------------------+

比较中的尾随空间处理

MySQL排序有一个pad属性,它的值是垫空间或者没有垫

对于非加入字符串(charVARCHAR, 和文本值),String Collat​​ion PAD属性确定字符串结束时尾随空格的比较中的处理:

  • 垫空间束缚,尾随空间在比较中是微不足道的;在不考虑尾随空格的情况下比较串。

  • 没有垫离子在比较中对尾随空格进行追踪空间,如任何其他角色。

可以使用两者来证明不同的行为utf8mb4二进制融合,其中一个是垫空间,另一个是没有垫.实例还展示了如何使用Information_Schema.拼写表以确定拼接的pad属性。

mysql> SELECT colation_name, PAD_ATTRIBUTE FROM INFORMATION_SCHEMA。collation WHERE COLLATION_NAME LIKE 'utf8mb4%bin';+------------------+---------------+ | COLLATION_NAME | PAD_ATTRIBUTE  | +------------------+---------------+ | utf8mb4_bin |垫空间| | utf8mb4_0900_bin |没有垫  | +------------------+---------------+ mysql >设置名称utf8mb4核对utf8mb4_bin;mysql> SELECT 'a' = 'a';+------------+ | ' “=” ' | +------------+ | 1  | +------------+ mysql >设置名称utf8mb4核对utf8mb4_0900_bin;mysql> SELECT 'a' = 'a';+------------+ | ' “=” ' | +------------+ | 0  | +------------+
请注意

比较在这种情况下,不包括喜欢无论排序规则如何,模式匹配运算符,尾随空格都很重要。

对于二进制字符串(二进制VARBINARY, 和斑点值)时,所有字节在比较中都是重要的,包括尾随空格:

mysql> SET NAMES binary;mysql> SELECT 'a' = 'a';+------------+ | ' “=” ' | +------------+ | 0  | +------------+

插入和检索的尾随空间处理

CHAR (N列存储非二进制字符串N长字符。对于插入,短于N字符与空格延伸。为了检索,删除尾随空格。

二进制(N列存储二进制字符串N个字节长。对于插入,短于N字节延长0 x00字节。为了检索,没有任何东西被删除;始终返回声明长度的值。

mysql> CREATE TABLE t1 (a CHAR(10) CHARACTER SET utf8 COLLATE utf8_bin, b BINARY(10));mysql> INSERT INTO t1 VALUES ('x','x');mysql> INSERT INTO t1 VALUES ('x ','x ');mysql> SELECT a, b, HEX(a), HEX(b) FROM t1;+------+------------+--------+----------------------+ | a | |十六进制(一个)|十六进制(b ) | +------+------------+--------+----------------------+ | x | | 78 | 78000000000000000000 | | | x | 78 | 78200000000000000000  | +------+------------+--------+----------------------+