• char与varchar详解


    区别

    varchar是变长字段,需要使用一个或两个字节存储长度(当允许存储的最大字节数MW(字符长度*每个字符需要的字节)大于255字节且真实字节数超过127字节时使用2字节,否则使用1字节),所以varchar也要按需分配

    varchar会有内存碎片问题(比如把200长度更新为50),如果一个行占用的空间增长,并且在页内没有更多的空间可以存储,在这种情况下InnoDB需要分裂页来使行可以放进页内,这样会增加碎片。内存碎片容易造成空间浪费和磁盘IO读写性能下降,因为数据更加随机分散。

    char的检索效率会更高

    char尾部空格不会存储,不足长度会空格填充,检索的时候会调用trim删除尾部的空格

    varchar尾部会存储空格,不足不会补空格

    下面的表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别:

    在这里插入图片描述

    请注意上表中最后一行的值只适用不使用严格模式时;如果MySQL运行在严格模式,超过列长度不的值不保存,并且会出现错误。

    从CHAR(4)和VARCHAR(4)列检索的值并不总是相同,因为检索时从CHAR列删除了尾部的空格。通过下面的例子说明该差别:

    mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));

    mysql> INSERT INTO vc VALUES ('ab ', 'ab ');

    mysql> SELECT CONCAT(v, ‘+’), CONCAT(c, ‘+’) FROM vc;

    在这里插入图片描述

    适用场景

    CHAR适合存储很短的字符串,或者所有值都接近同一个长度。例如,CHAR非常适合存储密码的MD5值,因为这是一个定长的值。对于经常变更的数据,CHAR也比VARCHAR更好,因为定长的CHAR类型不容易产生碎片。对于非常短的列,CHAR比VARCHAR在存储空间上也更有效率。例如用CHAR(1)来存储只有Y和N的值,如果采用单字节字符集只需要一个字节,但是VARCHAR(1)却需要两个字节,因为还有一个记录长度的额外字节。

    VARCHAR适合字符串很长或者所要存储的字符串长短不一,差别很大;字符串列的最大长度比平均长度大得多;列的更新很少,所以碎片不是问题。

  • 相关阅读:
    Qt QFrame详解
    【数据结构与算法】leetcode110.判断平衡二叉树
    MySQL笔记 去除表中的重复数据
    Python语言程序设计 习题7
    WEB前端网页设计 网页代码参数(背景、图片)类
    SpringCloud-12-Eureka:自我保护机制
    Ubuntu上Qt安装和配置的完整步骤
    TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗?
    mac版Idea快捷键
    ICLR 2023#Learning to Compose Soft Prompts for Compositional Zero-Shot Learning
  • 原文地址:https://blog.csdn.net/weixin_45950398/article/details/126905357