【问题标题】: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 个字符的字符串。存储要求也相同。我什么时候应该更喜欢一个而不是另一个?

【问题讨论】:

    标签: mysql types


    【解决方案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文档,你会看到。
    猜你喜欢
    • 2012-10-05
    • 2010-09-13
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2015-05-31
    • 2021-03-28
    相关资源
    最近更新 更多