哪个DATATYPE最好使用TEXT或VARCHAR?

这个问题是基于两个东西的性能大小

哪个DATATYPE最好使用TEXT或VARCHAR? 根据将影响和将会影响的performance?

这取决于你使用的是什么。 我讨厌给出这样一个通用的答案,但这是真的。 通常,尽可能地获取数据types。 如果你的string永远不会超过一些字符的上限,那么使用VARCHAR因为它会更有效一些。 如果您需要更多空间,请使用TEXT 。 如果你不确定你的文本会占用多less空间,那么你应该使用TEXT ; 性能差异并不是很大,而且在需求变化的时候,要做到面向未来的风险要比稍后改变风险更好。 只是我的两分钱。


在注释中,Pitarou指出,如果MySQL为你的查询创build了一个临时表(见这个 ),那么TEXT列将不会被存储在内存中,并且将不得不从磁盘读取,这会慢得多。 ( 来源 ,页面底部)。但这对大多数查询来说都不重要。

如果有人想知道PostgreSQL是如何比较的,我发现这个基准testing表明CHAR,VARCHAR和TEXT的performance都很好。 所以如果你使用的是Postgres,那么你使用的是什么types并不重要。

从V 5.0.3开始,VARCHAR的限制从0-256增加到0-65,535(取决于最大行大小(65,535字节,在所有列之间共享)和使用的字符集。

参考。 http://dev.mysql.com/doc/refman/5.0/en/char.html

如果您使用固定长度为64K的TEXT,即使您需要较小的限制

所以最好使用比TEXT 更高的VARCHAR 。 如果要求大于64K,则应使用MEDIUMTEXT或LONGTEXT。

VARCHAR你可以设置一个限制,它将接受每个logging多less个字符,文本是(虚拟)无限…不完全确定的性能,但我会假设更具体的数据types(varchar)会更快。

VARCHAR应该有更好的性能,因为它的大小有限。 事实上,在我所有使用MySQL的经验中,使用VARCHAR的search操作总是比TEXT更快。 无论如何,这是基于我的经验。 您应该检查文档以了解更多信息。

Queries against the TEXT table were always 3 times slower than those against the VARCHAR table (averages: 0.10 seconds for the VARCHAR table, 0.29 seconds for the TEXT table). The difference is 100% repeatable.

基准从http://forums.mysql.com/read.php?24,105964,105964

这真的取决于你的数据types。

如果你的字段是固定长度的(例如32个字符的散列值),那么使用CHAR。 这具有更好的性能,因为每个条目每行占用相同的空间。

VARCHAR的标准限制是255个字符,但我认为现在已经增加了。 文本是相当长的,通常只用于整个博客文章的大内容,并评论如果你不想要一个限制。

关于大小,VARCHAR和TEXT之间没有(或很less)区别,因为它们只是存储他们需要的东西。 CHAR字段将始终占用其分配的长度。

性能方面,VARCHAR通常更快。 VARCHAR也可以被索引,这导致更快的search。

在创build临时表时,MySQL将在内部将TEXT转换为varchar。 所以如果可能的话最好使用VARCHAR。 有一些与TEXT列有关的小错误,例如…

http://bugs.mysql.com/bug.php?id=36676

根据我的意见VARCHAR是最好的select,当你知道字符的长度。 它也将减less垃圾内存分配和空间问题。 TEXT将消耗255作为VARCHAR将消耗,因为你给它的值。

根据性能,VARCHAR也比TEXT更快。

text和varchar有细微的差别。 我有一个表如图所示:

 CREATE TABLE `test`.`tbl`( `kee` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `txt` TEXT(100), `vrchr` VARCHAR(100), PRIMARY KEY (`kee`) ); 

我插入一行:

  INSERT INTO `tbl` (`txt`, `vrchr`) VALUES ('1 2 3', '1 2 3'); 

txt有值:
1
2
3
vrchr有价值:
1