哪个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字节,在所有列之间共享)和使用的字符集。
如果您使用固定长度为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.
这真的取决于你的数据types。
如果你的字段是固定长度的(例如32个字符的散列值),那么使用CHAR。 这具有更好的性能,因为每个条目每行占用相同的空间。
VARCHAR的标准限制是255个字符,但我认为现在已经增加了。 文本是相当长的,通常只用于整个博客文章的大内容,并评论如果你不想要一个限制。
关于大小,VARCHAR和TEXT之间没有(或很less)区别,因为它们只是存储他们需要的东西。 CHAR字段将始终占用其分配的长度。
性能方面,VARCHAR通常更快。 VARCHAR也可以被索引,这导致更快的search。
在创build临时表时,MySQL将在内部将TEXT转换为varchar。 所以如果可能的话最好使用VARCHAR。 有一些与TEXT列有关的小错误,例如…
根据我的意见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