美文网首页
MySQL - varchar & text 区别

MySQL - varchar & text 区别

作者: 得鹿梦为鱼 | 来源:发表于2023-01-11 21:22 被阅读0次

当别人问我 varchar 和 text 有什么区别时,
我下意识想到的就是在需要储存很多数据的时候(比如新闻稿的正文),就用 text 类型,但它们到底有什么区别,答不上来

故此次去了解了一下 VARCHAR 和 TEXT,做到什么时候能用,该怎么用!

根据从 MySQL 官方文档了解到的,总结如下:
MySQL: V5.7
Charset: UTF8

VARCHAR(M)

The range of M is 0 to 65,535 bytes, a maximum of 21,844 characters
VARCHAR 最多支持 65535 字节,字符数就是 21844 个,这里面包含 汉字


varchar max M cannot exceed 21844
varchar max M is 21844

TEXT 实际上有四种类型,此处仅探讨 TEXT 类型

TINYTEXT : with a maximum length of 255 (28 − 1) characters
TEXT: with a maximum length of 65,535 (216 − 1) characters
MEDIUMTEXT: with a maximum length of 16,777,215 (224 − 1) characters
LONGTEXT: with a maximum length of 4,294,967,295 or 4GB (232 − 1) characters

TEXT 支持的最大字符数是 65,535,但是需要注意这段话
The effective maximum length is less if the value contains multibyte characters.

我之前印象中的 TEXT 其实是 LONGTEXT(可存 4GB)

区别

#1 长度限制不同

要储存数据超出最大长度限制都会报错

VARCHAR(M) 设置的长度(M)就是字符数,并且最大字符数为 21844

TEXT 支持的最大字符数为 65,535,但如果text字段里储存的值包含多字节字符(1汉字占3字节),则会让最大字符数小于 65,535,全部都是英文则没这个问题

#2 查询性能

TEXT 列在返回数据的时候,该字段的数据会通过临时表来处理,会有性能损耗,MYSQL 建议 如果不使用这个字段,就不要返回,避免使用 SELECT * 做查询

MySQL suggest

#3 索引

TEXT列上的索引,必须指定索引前缀长度
VARCHAR,前缀长度是可选的

#4 默认值

TEXT columns cannot have DEFAULT values

#5 排序

Only the first max_sort_length bytes of the column are used when sorting. The default value of max_sort_length is 1024

默认的话,也就是前1024字节的数据会用来排序,这个我未验证

参考

https://dev.mysql.com/doc/refman/5.7/en/string-type-syntax.html
https://dev.mysql.com/doc/refman/5.7/en/blob.html

相关文章

网友评论

      本文标题:MySQL - varchar & text 区别

      本文链接:https://www.haomeiwen.com/subject/eykicdtx.html