text类型一般分为 tinytext(255字节)、text(65535字节)、 mediumtext(int最大值16M),和longtext(long最大值4G)四种类型,它被用来存储非二进制字符集,而二进制字符集则使用blob类型的字段来存储。

从存储容量来看,text与varchar是相同的,所以在大多数情况下,我们可以把text视为varchar字段。但是,两者还是有一些差异的:

(1)text的最大限制也是64k个字节,但是实际是分开存储的,innodb默认只会存放前768字节在数据页中,而剩余的数据则会存储其他地方。而varchar/char等列是一起存储在表数据文件中,由此可见text数据类型实际上将会大幅度增加数据库表文件尺寸。

(2)varchar列在溢出的时候会自动转换为text类型。

(3)对text列进行排序的时候,决定顺序的字符个数是由参数max_sort_length来决定的。当text列的内容很多的时候,text列的内容会保留一个指针在记录中,这个指针指向了磁盘中的一块区域,当对这个表进行select * from table的时候,会从磁盘中读取text的值,影响查询的性能,而varchar不会存在这个问题。

标签: none

添加新评论