10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 36.4 mb
PDF (A4)- 36.4 mb
PDF (RPM)- 35.7 mb
HTML下载(TGZ)- 9.5 mb
HTML下载(Zip)- 9.5 mb
HTML下载(RPM)- 8.2 mb
手册页(TGZ)- 235.5 kb
手册页(Zip)- 347.0 kb
信息(Gzip)- 3.3 mb
信息(邮政编码)- 3.3 mb
本手册节选

10.8.5二进制排序与_bin排序的比较

介绍如何配置二进制二进制字符串的排序规则与_bin非二进制字符串的排序规则。

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

非二进制字符串(使用字符VARCHAR,文本数据类型)具有字符集和排序规则二进制.给定的非二进制字符集可以有多个排序规则,每个排序规则为字符集中的字符定义一个特定的比较和排序顺序。其中之一是二进制排序规则,由a表示_bin排序规则名称中的后缀。例如,的二进制排序规则use utf8而且latin1被命名为utf8_bin而且latin1_bin,分别。

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

比较和排序单元

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

字符集转换

非二进制字符串具有字符集,并且在许多情况下会自动转换为另一个字符集,即使字符串具有_bin排序:

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

    UPDATE t1 SET utf8_bin_column=latin1_column;INSERT INTO t1 (latin1_column) SELECT utf8_bin_column;
  • 的列值时插入更新使用字符串文字:

    SET NAMES latin1;INSERT INTO t1 (utf8_bin_column) VALUES ('string-in-latin1');
  • 当从服务器向客户端发送结果时:

    SET NAMES latin1;SELECT utf8_bin_column FROM t2;

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

文书夹转换

非二进制字符集的排序规则提供了关于字符大小写的信息,因此非二进制字符串中的字符可以从一个字母大小写转换为另一个字母大小写,甚至为_bin排序时忽略字母大小写的排序规则:

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

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

mysql> SET NAMES二进制mysql> SELECT LOWER('aA'), LOWER(CONVERT('aA' USING utf8mb4));+-------------+------------------------------------+ | 低(aA) |低(转换(使用utf8mb4“aA” )) | +-------------+------------------------------------+ | aA aA |  | +-------------+------------------------------------+

比较中的尾随空格处理

非二进制字符串有垫的空间行为,包括_bin排序。尾随空格在比较中不重要:

mysql> SET NAMES utf8 COLLATE utf8_binmysql> SELECT 'a' = 'a';+------------+ | ' “=” ' | +------------+ | 1  | +------------+

对于二进制字符串,所有字节在比较中都是重要的,包括尾随空格:

mysql> SET NAMES二进制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));INSERT INTO t1 VALUES ('x','x');INSERT INTO t1 VALUES ('x ','x ');mysql> SELECT a, b, HEX(a), HEX(b) FROM t1;+------+------------+--------+----------------------+ | a | |十六进制(一个)|十六进制(b ) | +------+------------+--------+----------------------+ | x | | 78 | 78000000000000000000 | | | x | 78 | 78200000000000000000  | +------+------------+--------+----------------------+