介绍如何配置二进制
二进制字符串的排序规则与_bin
非二进制字符串的排序规则。
二进制字符串(使用二进制
,VARBINARY
,团
数据类型)有一个名为二进制
.二进制字符串是字节序列,这些字节的数值决定比较和排序顺序。看到章节10.10.8,“二进制字符集”.
非二进制字符串(使用字符
,VARCHAR
,文本
数据类型)具有字符集和排序规则二进制
.给定的非二进制字符集可以有多个排序规则,每个排序规则为字符集中的字符定义一个特定的比较和排序顺序。其中之一是二进制排序规则,由a表示_bin
排序规则名称中的后缀。例如,的二进制排序规则use utf8
而且latin1
被命名为utf8_bin
而且latin1_bin
,分别。
的二进制
排序规则不同于_bin
整理的几个方面,在以下部分讨论:
二进制字符串是字节序列。为二进制
排序、比较和排序基于数值字节值。非二进制字符串是字符序列,可以是多字节的。非二进制字符串的排序规则定义了用于比较和排序的字符值的顺序。为_bin
排序规则,这种排序基于数字字符代码值,这类似于二进制字符串的排序,只是字符代码值可能是多字节的。
非二进制字符串具有字符集,并且在许多情况下会自动转换为另一个字符集,即使字符串具有_bin
排序:
对于二进制字符串列,不发生转换。对于类似上述情况,字符串值将按字节复制。
非二进制字符集的排序规则提供了关于字符大小写的信息,因此非二进制字符串中的字符可以从一个字母大小写转换为另一个字母大小写,甚至为_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 | +------+------------+--------+----------------------+