最近遇到一个问题: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。


英雄之旅
8 声望1 粉丝