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 可以将列设置为NULLNOT NULL,并且可以设置DEFAULT 值,但不能使用TEXT。如果您需要NULLDEFAULT 中的一项或两项功能,请使用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中KEY问题

数据库中的 varchar(255) 原因剖析

MySQL 列设置为 varchar(255) 排序中的问题

<转> MySQL中采用类型varchar(20)和varchar(255)对性能上的影响

MySQL中的char与varchar详解

mysql varchar最大是多少?