MySQL 中的 VARCHAR(255) 和 TINYTEXT 字符串类型有啥区别?
Posted
技术标签:
【中文标题】MySQL 中的 VARCHAR(255) 和 TINYTEXT 字符串类型有啥区别?【英文标题】:What's the difference between VARCHAR(255) and TINYTEXT string types in MySQL?MySQL 中的 VARCHAR(255) 和 TINYTEXT 字符串类型有什么区别? 【发布时间】:2011-01-18 07:40:11 【问题描述】:mysql 中的 VARCHAR(255) 和 TINYTEXT 字符串类型有什么区别?
它们中的每一个都允许存储最大长度为 255 个字符的字符串。存储要求也相同。我什么时候应该更喜欢一个而不是另一个?
【问题讨论】:
【参考方案1】:您不能将DEFAULT
值分配给TINYTEXT
,也不能在后者上创建无前缀索引。
在内部,会在内存中分配额外的对象来处理TEXT
(包括TINYTEXT
)列,这可能会导致大型记录集上出现内存碎片。
请注意,这仅涉及列在记录集中的内部表示,而不涉及它们在磁盘上的存储方式。
【讨论】:
怎么样,当mysql需要临时表时,如果是blob或text(inc.tinytext)它使用磁盘而不是内存来创建临时表 搜索哪个更便宜(时间和 CPU 周期)?【参考方案2】:使用VARCHAR
可以将列设置为NULL
或NOT NULL
,并且可以设置DEFAULT
值,但不能使用TEXT
。如果您需要NULL
和DEFAULT
中的一项或两项功能,请使用VARCHAR
。
【讨论】:
TINYTEXT 列也可以为 NULL。 但不是默认的【参考方案3】:在 varchar 中你必须设置一个字符的长度,而在 tanytext 中没有这样的东西,它为 ex 节省了数据库的内存:
对于地址,您必须定义 varchar(50),而不是您的地址可能是 50 个字符或更少,更糟糕的情况是您的字符超过 50 个字符,这是 varchar 的限制,如果字符小于 50,它占用50个字符的内存在这种情况下内存是增加的
所以使用 tanytext 它定义的字符长度取决于字符的大小,因此可以节省内存
【讨论】:
这是错误的。 varchar 仅使用与当前存储的长度一样多的内存(与 char 相比)。见dev.mysql.com/doc/refman/5.0/en/storage-requirements.html 嗨 viblo,在 varchar 中,我们预先定义了字符串的长度,它占用内存达到预定义的限制。这不是 tanytext 的情况。 我不明白你的意思。 MySQL 文档说 varchar 需要“如果列值需要 0 – 255 个字节,则需要 L + 1 个字节,如果值可能需要超过 255 个字节,则需要 L + 2 个字节”,其中 L 是要存储的文本的实际长度,而不是您的实际长度将 varchar 定义为最大长度。 @nilesh -TINYTEXT
的 隐式 最大为 255 个字节(或者可能是 256 个)。
@viblo 是对的。查看mysql文档,你会看到。以上是关于MySQL 中的 VARCHAR(255) 和 TINYTEXT 字符串类型有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 列设置为 varchar(255) 排序中的问题