此问题基于两个方面效果和尺寸
使用TEXT或VARCHAR哪个DATATYPE更好?基于将影响和将影响的表现?
答案 0 :(得分:97)
这取决于你使用它的目的。我讨厌给出这样一个通用答案,但这是真的。通常,尝试尽可能具体地获取数据类型。如果您的字符串永远不会超过字符的某些上限,那么请使用VARCHAR
,因为它会更有效率。如果您需要更多空间,请使用TEXT
。如果您不确定文本将占用多少空间,则应该使用TEXT
;性能差异不是很大,并且最好是面向未来,而不是在您的需求发生变化时必须稍后更改它的风险。只是我的两分钱。
在评论中,Pitarou指出,如果MySQL为您的查询创建临时表(请参阅this),TEXT
列将不会存储在内存中,并且必须从磁盘,慢得多。 (Source,页面底部。)但这对大多数查询都无关紧要。
如果有人想知道PostgreSQL如何比较,我发现this benchmark表明CHAR,VARCHAR和TEXT的表现同样出色。因此,如果您使用的是Postgres,那么使用哪种类型并不重要。
答案 1 :(得分:7)
从V 5.0.3开始,VARCHAR的限制从0-256增加到0-65,535(取决于最大行大小(65,535字节,在所有列之间共享)和使用的字符集。)
如果您使用固定长度为64k的TEXT,即使您需要较小的限制
最好使用VARCHAR,其上限而不是TEXT。 如果要求超过64K,请相应使用MEDIUMTEXT或LONGTEXT。
答案 2 :(得分:6)
的基准针对TEXT表的查询总是比针对VARCHAR表的查询慢3倍(平均值:VARCHAR表为0.10秒,TEXT表为0.29秒)。差异是100%可重复的。
答案 3 :(得分:3)
VARCHAR你可以设置每个记录接受多少个字符的限制,文本是(几乎)无限的...不完全确定性能,但我会假设一个更具体的数据类型(varchar)会更快。 / p>
答案 4 :(得分:3)
VARCHAR应该具有更好的性能,因为它的大小有限。事实上,在我使用MySQL的所有经验中,使用VARCHAR而不是TEXT的搜索操作总是更快。无论如何,这是基于我的经验。您应该查看文档以了解更多相关信息。
答案 5 :(得分:2)
这实际上取决于您的数据类型。
如果您的字段是固定长度的(例如,32个字符的哈希值),则使用CHAR。这具有更好的性能,因为每个条目每行占用相同的空间。
VARCHAR的标准限制是255个字符,但我认为它现在已经增加了。 TEXT非常长,通常只用于整篇博客文章等大内容,如果你不想要限制,则会发表评论。
关于大小,VARCHAR和TEXT之间没有(或很少)区别,因为它们只存储了他们需要的东西。 CHAR字段将始终占用其分配的长度。
性能方面,VARCHAR通常更快。 VARCHAR也可以编入索引,从而加快搜索速度。
答案 6 :(得分:2)
MySQL会在创建临时表时将TEXT内部转换为varchar。因此,如果可能,最好使用VARCHAR。有一些与TEXT列相关的小错误,例如......
答案 7 :(得分:2)
根据我的意见,当你知道字符的长度时,VARCHAR是最好的选择。它还将减少垃圾内存分配和空间问题。 TEXT将消耗255,而VARCHAR将消耗,因为你给它赋值。
根据性能,VARCHAR也比TEXT快。
答案 8 :(得分:-5)
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