关于mysql:varchar-还是text

3次阅读

共计 801 个字符,预计需要花费 3 分钟才能阅读完成。

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

正文完
 0