• Mysql中char和varchar的区别详细剖析


    一、区别

    1、最大长度:

    char最大长度是255个字符,varchar最大长度是65535个字符。

    2、定长:

    char是定长的,不足的部分会用隐藏空格填充,varchar是不定长的。
    当向char中插入数据时,如果该数据小于定义的长度,那么就会用空格填充不足的部分;
    当向varchar中插入数据时,如果数据小于定义的长度,那么按数据的实际长度存储,即插入多长就存多长;当要存储的数据的实际长度大于定义的长度时,会对该数据进行自动截取。也就是说varchar的动态存储体现在存储数据的实际长度小于所给它定义的长度时。

    3、空间使用:

    char会浪费空间,varchar会更加节省空间。

    4、查找效率:

    char查找效率会很高,varchar查找效率会更低。
    因为char的长度固定,故char的存取速度还是要比varchar快得多,存储与查找会更加方便;但是char也为此付出了空间的代价,因为其长度固定,所以会占据多余的空间,可谓是以空间换取时间效率。varchar则刚好相反,是以时间换空间,存储与查找相比于char效率更低一些。

    5、尾部空格:

    char插入时可省略,vaechar插入时不会省略,但查找时省略。

    二、char比varchar查询效率更快以及比varchar更浪费空间的原因

    这是由他们在磁盘上存放的不同形式决定的,我们先来看一个图:
    在这里插入图片描述
    从图中我们可以明显发现存储相同的数据,char类型会比varchar类型更耗费空间。
    char类型在存放数据的时候,中间是没有间隔的,数据本身是有空格的,但是数据段之间是没有间隔的,这是因为我们在创建列的时候已经告诉MySQL列的长度了,MySQL在查询数据的时候,只需要按部就班寻找就行了,不需要在中途计算这个数据段的长度。
    但是varchar类型的存放就不同了,它是动态分配存储空间的,在每个数据段开头,都要有一段空间来(1~2个字节)存放数据段的长度信息,在数据段的结尾也还有一段空间(1个字节)标记此字段的节数。MySQL在读取一个数据段的时候,首先要读开头,比如读到了3,说明数据段的长度是3,之后就不多不少,只读3个字节,也只分配3个字节的存储空间。所以MySQL在遍历数据的时候,磁针要比char类型的列,多读很多次磁盘来获取字段的真实长度,这就是为什么varchar比char查询效率低的原因了。

    三、常用场景

    一,存储非常非常短的信息,比如门牌号码101,201……这样很短的信息应该用char,因为varchar还要占1个byte用于存储信息长度,本来varchar是用来节约存储空间的,但现在得不偿失。

    二,固定长度的。更适合用char,比如使用uuid作为主键,那用char应该更合适。因为他固定长度,此时varchar动态根据长度的特性就相当于没有了,而且还要占1个长度信息。

    三,十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要耗费很多的精力用于计算,而这些对于char来说是不需要的,所以这种场景下更适合用varchar。

  • 相关阅读:
    项目管理工具禅道
    双亲委派模型
    基于微信积分兑换商城小程序系统设计与实现 开题报告
    ubuntu 22.04.3 live server图文安装流程
    【加油站会员管理小程序】02创建数据源
    C++ 11 chrono
    休闲娱乐 - 种花记
    【FPGA教程案例87】加解密1——基于FPGA的AES加解密算法verilog实现
    CC1101RGPR射频收发器 Low-Power Sub-1GHz 射频收发器
    iOS深入了解ReactiveCocoa的使用(一)
  • 原文地址:https://blog.csdn.net/m0_51358164/article/details/126404951