最近遇到一个问题:mysql 建表的时候,一个大的文本,是varchar还是text。
mysql 新版varchar 最大长度曾经反对到65535了,跟text一样。
在占用存储长度上,如果varchar(M) M < 255 的话,varchar用一个字节保留长度,text始终用2字节保留长度。
mysql 官网给的区别:
1,如果该字段创立索引,text必须自定索引前缀长度,varchar能够不必。(ps:varchar理论应用中,最好也指定前缀长度)
2,text 没有 default 值。
还有一个就是:
Instances of BLOB or TEXT columns in the result of a query that is processed using a temporary table causes the server to use a table on disk rather than in memory because the MEMORY storage engine does not support those data types
带text字段的sql,如果须要用到长期表的时候,只能在磁盘创立,不能在内存创立。
这个应该是最大的区别了,会影响到性能。其余的应该没啥了,如果遇到再来补充。
只有 select 子句中蕴含 blob 类型字段,就会影响 MySQL 对于排序操作的优化。
select 字段列表里包含 blob 类型字段(text 系列字段、blob 系列字段都属于 blob 类型字段),排序时只能应用 <sort_key, rowid> 这种类型的排序,要先查从存储引擎查出排序字段和主键 ID,而后再依据主键 ID 去存储引擎查问须要返回给用户的其它字段,这有点相似回表的意思。
blob 类型字段不能应用 <sort_key, addon_fields>、<sort_key, packed_addon_fields> 这 2 种对于排序的优化。
论断:区别很小,然而能选varchar 还是用varchar。