何时在 mysql 中使用 TEXT 而不是 VARCHAR [重复]

Posted

技术标签:

【中文标题】何时在 mysql 中使用 TEXT 而不是 VARCHAR [重复]【英文标题】:When to use TEXT in mysql instead of VARCHAR [duplicate] 【发布时间】:2012-07-11 14:41:45 【问题描述】:

可能重复:mysql: Large VARCHAR vs. TEXT?

既然VARCHAR 现在可以有65k 字节,那么什么时候应该使用TEXT 而不是VARCHAR

【问题讨论】:

当您需要超过 65k 个字符时。 :) 我认为应该是 65k 字节,而不是字符 哦,是的。 65k 字节。更新了我的问题。 【参考方案1】:

文本应该用于非常长的不确定长度的字符串。此外,返回 TEXT 字段的查询往往比对应的 VARCHAR 慢得多。

【讨论】:

在我的数据库中,我有一个名为 Description 的列。数据类型应该是 VARCHAR 还是 TEXT?我不确定描述数据的长度,但我计划在前端设置字数限制,以便它具有最大长度。【参考方案2】:

VARCHAR 的存储方式与 InnoDB 中的 TEXT/BLOB 字段相同。

从存储准 BLOB、TEXT 为 以及只要 VARCHAR 处理相同 通过 Innodb 的方式。这就是为什么 Innodb 手册称它为“长列”而不是 比 BLOB。

source

除非您需要索引这些列(在这种情况下,VARCHAR 更快)没有理由使用 VARCHAR 而不是 TEXT 用于长字段 - MySQL 中有一些特定于引擎的优化来调整根据长度检索数据,您应该使用正确的列类型来利用这些。

如果您使用的是MyISAM,则有关该主题的深入讨论是here。


TEXTBLOB 存储在表外,表中只有一个指向实际存储位置的指针。

VARCHAR 与表内联存储。 VARCHAR 在大小合理时会更快。

根据this test,VARCHAR 的速度大约是文本的三倍。

【讨论】:

定义“长字段”。 @PaulBrewczynski > 768 字节(参见 Lion 发布的链接) 对 InnoDB 的一个更正:仅当“long”(> 768 字节)时,TEXT 和 BLOB 才从表中存储在 InnoDB 中,并且只有尾部存储在表外(类似于 VARCHAR)。真正的区别在于最大长度不同,而对于 VARCHAR,您必须提供最大长度(与 65k 的系统限制一起强制执行)。 啊,应该知道数据类型会影响性能 更新:自编写此答案以来,在 InnoDB 中创建了更多 ROW_FORMATs,并且 767 限制已增长到大约 3K。底线:经过“几个”KB,VARCHARTEXT 的处理方式相同。

以上是关于何时在 mysql 中使用 TEXT 而不是 VARCHAR [重复]的主要内容,如果未能解决你的问题,请参考以下文章

何时更喜欢 XAMPP 而不是 Linux、Apache、MySQL 和 PHP 的完整安装

何时在 F# 中使用序列而不是列表?

为啥使用片段,以及何时使用片段而不是活动?

为啥以及何时在 Spring 中使用 @Inject 而不是 @Autowired? [复制]

何时在 c# 中使用 ArrayList 而不是 array[]?

何时在 Java 中使用 LinkedList 而不是 ArrayList?