varchar(255) v tinyblob v tinytext

15
我的附带问题是,tinyblob和tinytext之间真的有任何区别吗?
但我的真正问题是,如果有的话,我选择varchar(255)而不是tinyblob或tinytext的原因是什么?
3个回答

18

主要是存储需求和内存处理/速度:

在下表中,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 之间唯一的区别。


5

VARCHAR(255)比tinyblob或tinytext更符合SQL标准。因此,您的脚本和应用程序在跨数据库供应商方面将更具可移植性。


-8
你不能对TINYTEXT应用字符集,但是可以对VARCHAR(255)应用。

2
这并不是真的,你可以在mySQL中对VARCHAR和TINYTEXT都应用字符集,但不能对TINYBLOB应用。 - Emre Yazici

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接