我有一个包含2列的表:' Id' (datatype = INT),' Representation' (数据类型=二进制)。 我想在'表示'中以二进制数字的形式存储十六进制值。柱。 什么是我可以存储在'表示'中的最大二进制数字数。专栏?
答案 0 :(得分:1)
BINARY
MySql docs on the binary
data type,提及:
VARBINARY
和CHAR
的允许最大长度与VARCHAR
和BINARY
的允许最大长度相同,但VARBINARY
和{的长度除外{1}}是以字节为单位的长度,而不是字符长度。
因此binary
与char
处于同一级别,varbinary
与varchar
处于同一级别。
docs on the char
data type,提及:
CHAR
列的长度固定为您在创建表时声明的长度。长度可以是0到255之间的任何值。
因此,binary
的最大大小可以通过以下方式实现:
CREATE TABLE mytable (
id int,
representation binary(255)
)
这对应于255个字节的数据,对应于510个十六进制数字或2040位。
VARBINARY
varbinary
类型最多可以存储65,535个字节,必须从中减去其他列的大小。同样,这来自varchar
上的文档:
VARCHAR
列中的值是可变长度字符串。长度可以指定为0到65,535之间的值。VARCHAR
的有效最大长度取决于最大行大小(65,535字节,在所有列之间共享)和使用的字符集。
所以,让我们说在其他列中需要大约500字节的空间,然后你可以定义这个表:
CREATE TABLE mytable (
id int, // takes 4 bytes
representation binary(65000),
// other fields come here, taking up less than 532 bytes
)
...你将有65,000个字节,即130,000个十六进制数字或520,000个字节。
二进制 [( n )]
长度为n个字节的固定长度二进制数据,其中n是1到8,000之间的值。存储大小为 n 字节。
这意味着使用此表定义:
CREATE TABLE mytable (
id int,
representation binary(8000)
)
...您可以存储8,000个字节,即16,000个十六进制数字或64,000位。
请注意varbinary
的限制是相同的。以下建议在文档中给出:
当列数据条目的大小差别很大时,请使用
varbinary
。