在这里咨询MySql文档时:http://dev.mysql.com/doc/refman/5.5/en/storage-requirements.html,我可以为我的问题得出2个答案......
1)更明显的答案:
TINYBLOB : 2 ^ 8 - 1 = 255
BLOB : 2 ^ 16 - 1 = 65535
MEDIUMBLOB : 2 ^ 24 - 1 = 16777215
LONGBLOB : 2 ^ 32 - 1 = 4294967295
2)比较复杂的答案:
TINYBLOB : 2 ^ 8 - 1 = 255
BLOB : 2 ^ 16 - 2 = 65534
MEDIUMBLOB : 2 ^ 24 - 3 = 16777213
LONGBLOB : 2 ^ 32 - 4 = 4294967292
MySql存储实际数据的大小以及该数据。并且为了存储该尺寸,它将需要:
因此,为了存储数据加上数据的大小,并防止它超过256 / 64K / 16M / 4G字节所需的存储空间,在确定时需要-1 / -2 / -3 / -4因子最大声明列长度(不是-1 / -1 / -1 / -1)。我希望这是有道理的:)
这2个答案中的哪一个是正确的? (假设其中一个是。)
答案 0 :(得分:2)
这是答案1.
从您链接的文档:
这些对应于四种BLOB类型,并且具有相同的最大长度和存储要求。参见11.6节“Data Type Storage Requirements”。
其他页面有一个包含这些约束的表。对于LONGBLOB,所需的存储是:
L
+ 4个字节,其中L
< 2 32
L
表示给定字符串值的实际字节长度。
至于声明的最大列长度,请自行尝试:
mysql> create table foo(a blob(4294967295));
Query OK, 0 rows affected (0.08 sec)
mysql> create table bar(a blob(4294967296));
ERROR 1439 (42000): Display width out of range for column 'a' (max = 4294967295)
(您不能为其他三种blob类型声明大小。)