前奏
- 我的问题忽略了“客户端和服务器之间实际可以传输的最大值取决于可用内存量和通信缓冲区的大小”。
- 我在这里也不考虑 Unicode。我知道,如果一个字符使用超过 1 个字节的存储空间,TEXT 列的实际最大长度(字符数)将会减少。
在此处查阅 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 B 时为 1 字节
- 数据 < 64 KB 时为 2 个字节
- 当数据 < 16 MB 时为 3 个字节
- 数据 < 4 GB 时为 4 字节
因此,为了存储数据加上数据的大小,并防止其超过所需存储量的 256/64K/16M/4G 字节,在确定时需要 -1/-2/-3/-4 因子声明的最大列长度(不是 -1/-1/-1/-1)。我希望这是有道理的:)
问题
这两个答案哪一个是正确的? (假设其中之一是。)
最佳答案
这是答案1。
从您链接到的文档:
These correspond to the four BLOB types and have the same maximum lengths and storage requirements. See Section 11.6, “Data Type Storage Requirements”.
另一个页面有一个包含这些约束的表。对于 LONGBLOB,所需的存储为:
L
+ 4 bytes, whereL
< 232
L
represents the actual length in bytes of a given string value.
至于声明的最大列长度,你自己试试吧:
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 类型的大小。)
关于mysql - MySql TEXT/BLOB 类型的最大声明列长度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13379333/