在MySQL中,VARCHAR(255)和TINYTEXT字符串类型有什么区别?

54

VARCHAR(255)和TINYTEXT字符串类型在MySQL中有何区别?

它们都允许存储最大长度为255个字符的字符串。存储要求也相同。那么我应该在什么情况下更倾向于使用其中一种呢?

3个回答

52

TINYTEXT 类型的列中不能赋予 DEFAULT 值,并且您也不能在该列上创建无前缀索引。

在内部,为了处理包括 TINYTEXT 在内的 TEXT 列,需要在内存中分配额外的对象,这可能会导致大型记录集上的内存碎片化。

请注意,这仅涉及记录集中列的内部表示,而不涉及它们在磁盘上的存储方式。


当MySQL需要临时表时,如果是BLOB或TEXT(包括TINYTEXT),它会使用磁盘而不是内存来创建临时表。 - andho
20
哪种搜索方式更便宜(时间和CPU周期)? - user

10

使用 VARCHAR 可以将列设置为 NULLNOT NULL,并且可以设置 DEFAULT 值,但是 TEXT 不支持。如果需要其中一个或两个功能,请使用 VARCHAR,即 NULLDEFAULT


4
TINYTEXT列也可以为NULL。 - planetp
但不是默认。 - Onic Team

-2

在varchar中,您必须设置字符的长度,而在tanytext中没有这样的限制,它可以节省数据库的内存,例如:

对于地址,您必须定义varchar(50),然后您的地址可能是50个字符或更少。最糟糕的情况是,如果字符超过50个,则varchar的限制就会出现。如果字符少于50个,则它将占用50个字符的内存,在这种情况下,内存会增加。

因此,请使用tanytext,它根据字符的大小定义字符长度,从而节省内存。


1
这是错误的。Varchar 只使用当前存储长度所需的内存(与 char 相反)。请参阅 http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html。 - viblo
嗨,viblo,在varchar中,我们预定义字符串的长度,它会占用预定义的内存限制。但在tanytext中不是这样的。 - nilesh
1
我不明白你的意思。MySQL文档表示,如果列值需要0-255个字节,则varchar需要“L+1个字节”,如果值可能需要超过255个字节,则需要“L+2个字节”,其中L是存储的文本的实际长度,而不是您定义的varchar的最大长度。 - viblo
@nilesh - TINYTEXT 隐含的最大长度为 255 字节(或者可能是 256)。 - Rick James
@viblo是正确的。查看MySQL文档,你就会明白。 - the

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