序幕
- 我的问题忽略了“您实际上可以在客户端和服务器之间传输的最大值取决于可用内存量和通信缓冲区的大小”。
- 我在这里也没有考虑 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)。我希望这是有道理的 :)
问题
这2个答案哪个是正确的?(假设其中之一是。)