我的附带问题是,tinyblob和tinytext之间真的有任何区别吗?
但我的真正问题是,如果有的话,我选择varchar(255)而不是tinyblob或tinytext的原因是什么?
但我的真正问题是,如果有的话,我选择varchar(255)而不是tinyblob或tinytext的原因是什么?
主要是存储需求和内存处理/速度:
在下表中,
M
代表非二进制字符串类型的声明列长度,二进制字符串类型则代表字节数。L
代表给定字符串值的实际长度(以字节为单位)。VARCHAR(
M
),VARBINARY(M
):
如果列值需要0-255个字节,则需要L
+1个字节,
如果值可能需要超过255个字节,则需要L
+2个字节TINYBLOB,TINYTEXT:
其中L
< 28,需要L
+1个字节
此外,请参阅此帖子:
对于每个正在使用的表,MySQL会为其分配4行的内存。对于这些行中的每一行,CHAR(X)/VARCHAR(X)列占用X个字符。
另一方面,TEXT/BLOB由8字节指针+1-4字节长度(取决于BLOB/TEXT类型)表示。 BLOB/TEXT在使用时动态分配。这将使用更少的内存,但在某些情况下,它可能会在长期运行中破碎您的内存。
编辑:顺便说一下,blob 存储二进制数据,而 text 存储 ASCII,这是 TINYBLOB 和 TINYTEXT 之间唯一的区别。
VARCHAR(255)比tinyblob或tinytext更符合SQL标准。因此,您的脚本和应用程序在跨数据库供应商方面将更具可移植性。