美文网首页
MySQL中各种字符型的区别与意义

MySQL中各种字符型的区别与意义

作者: djz0306 | 来源:发表于2019-06-22 16:38 被阅读0次

    字符型的类型比较多,常用的有 char, varchar, text, blob四种。本篇一一进行整理归纳。

    char与varchar区别

    存储方式与读取的区别

    char 叫做定长字符串,每个数据存储的长度是固定的。好处是查找行记录时,完全可以通过行数与长度计算出来文件指针的偏移量,查找的效率比 varchar 高一些。缺点也是明显的无论是否达到指定长度,实际都占据指定的长度n,如果数据长度小于 n 会用空格在末尾补 n 个长度,会浪费一定的空间。

    varchar 叫做变长字符串,数据存储的时候,即使没存满设定的长度,也不会用空格补满。那么就导致了变长的字符串读取和定长的方式不同。varchar 会在数据前用一个字节或者两个字节前缀来记录数据长度。如果声明的 varchar 长度超过255就是2个字节。

    以公交车票价为例子来说明此过程。有些公交的票价是固定的,无论是坐一站还是从头坐到尾,都是一样的价格。这种计算方式的好处就是统计方便,每次只用投币2元即可,也不需要乘务员。但是就会导致即使坐了较短的距离也付了固定的钱。另一种公交的价格计算方式是依据乘坐的距离。坐的越长价格越贵。这种方式的好处就是不会出现只坐一两站却付了很多钱,但是有个缺点就是需要有个乘务员或者系统依据每次乘坐的距离。扣除花的钱。在 varchar 中数据前面的前缀就相当于售票员或者计价系统,按照上车地点,坐车距离,扣除每次花的钱。

    类型 宽度 可存字符 实际字符长度(i<=M) 实际占用空间 利用率
    char M M i M i/M <= 100%
    varchar M M i i+(1-2)字节 i/(i+1或2) <100%

    定长的利用率是可能达到 100% 的。下面可以验证一下:

    含有char与varchar类型数据的表.jpg

    插入一条数据:

    insert into actor values ("闫妮 ","闫妮 ");
    

    注意插入的数据后都有一个空格。然后以 concat 连接数据与感叹号可以发现:

    char与varchar的区别.jpg

    可以看到定长后方的空格并没有显示出来。因为 char 类型在不足长度 n 的时候用空格补齐,取出时再把右侧空格删除。意味着如果 char 类型右侧有空格时数据会空格丢失

    存储范围的区别

    char(M) 类型 M 的范围在0到255之间,而 varchar(M) 范围在0到65535之间

    注意事项

    在 cha(M) 与 varchar(M) 中 M 表示的是字符数,而不是字节数。例如以下例子:

    char与varchar类型的长度意义.jpg

    如果按照6个 utf8 中文字符理解,等于18个字节,可以完整存下 “wulinwaizhuan” 这串字母,但是最后只存了前六个字母。

    text

    text 是指文本来行,可以存比较大的本文内容,但是搜索速度慢,如果不是特别大的内容,还是使用 char 和 varchar 比较好。text 不用加默认值,加了也没有用

    blob

    blob 是二进制类型,一般用来存储图像音频等二进制信息。可以防止图片或者音频中的部分内容因为字符集的原因导致在入库时被过滤。

    相关文章

      网友评论

          本文标题:MySQL中各种字符型的区别与意义

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