美文网首页
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