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

11.3.3 BINARY和VARBINARY类型

二进制而且VARBINARY类型类似于字符而且VARCHAR,只不过它们存储的是二进制字符串而不是非二进制字符串。也就是说,它们存储的是字节串而不是字符串。这意味着他们有二进制字符集和排序、比较和排序都基于值中字节的数值。

允许的最大长度与二进制而且VARBINARY因为它是为了字符而且VARCHAR,除了长度为二进制而且VARBINARY以字节而不是字符来度量。

二进制而且VARBINARY数据类型不同于字符的二进制而且VARCHAR二进制数据类型。对于后一种类型,二进制属性不会导致将列视为二进制字符串列。相反,它会导致二进制(_bin)要使用的列字符集的排序规则(如果没有指定列字符集,则为表默认字符集),并且列本身存储非二进制字符串而不是二进制字节字符串。例如,如果默认字符集为latin1CHAR(5)二进制被视为CHAR(5)字符集latin1 COLLATE latin1_bin.这不同于二(5)属性的5字节二进制字符串二进制字符集和排序。的差异的信息二进制整理二进制字符集和_bin非二进制字符集的排序,请参见第10.8.5节“binary Collation compare to _bin Collations”

如果没有启用严格的SQL模式,并且将值赋给二进制VARBINARY如果列的长度超过该列的最大长度,则该值将被截断以适合该列,并生成警告。对于截断的情况,要导致错误发生(而不是警告)并抑制值的插入,请使用严格的SQL模式。看到第5.1.10节,“Server SQL模式”

二进制值被存储,它们被填充为指定长度的填充值。pad值为0 x00(零字节)。值右填充0 x00对于插入,并且检索时不删除尾随字节。所有字节在比较中都是重要的,包括命令而且截然不同的操作。0 x00与空间不同的比较,与0 x00在空格之前排序。

示例:二(3)列,“一个”就变成了' \ 0当插入。' \ 0就变成了“\ \ 0”当插入。两个插入的值在检索时保持不变。

VARBINARY,对插入没有填充,也没有为检索剥离字节。所有字节在比较中都是重要的,包括命令而且截然不同的操作。0 x00与空间不同的比较,与0 x00在空格之前排序。

对于去掉尾随pad字节或比较忽略它们的情况,如果列的索引需要唯一值,则在列中插入仅在尾随pad字节数量上不同的值将导致重复键错误。例如,如果一个表包含“一个”,试图储存' \ 0导致重复密钥错误。

如果计划使用。则应仔细考虑上述填充和剥离特性二进制用于存储二进制数据的数据类型,您要求检索的值与存储的值完全相同。下面的例子说明了如何操作0 x00填充的二进制值影响列值比较:

CREATE TABLE t (c BINARY(3));查询OK, 0行影响(0.01秒)mysql> INSERT INTO t SET c = 'a';查询OK, 1 row affected (0.01 sec) mysql> SELECT HEX(c), c = 'a', c = 'a\0\0' from t;+--------+---------+-------------+ | 十六进制(c) | c = c a | = ' \ 0 \ 0 ' | +--------+---------+-------------+ | 610000 | 0 | 1  | +--------+---------+-------------+ 1行集(0.09秒)

如果检索到的值必须与为不带填充的存储指定的值相同,则最好使用VARBINARY或者其中一个而是数据类型。