MySql中char和varchar的区别

  • 语义上看,varchar是变长的(Variable-length),char是定长的(Fixed-length)

  • mysql层区别(具体情况由存储引擎决定)

    • 最大长度:char是255,varchar是65535,单位是字符(而不是字节)。

    • 尾随空格:char会将尾随空格去掉,而varchar不会。

      • 因为存储时,char会用空格填充至指定长度,所以取出时需要去除空格。如果char字段有唯一索引,aa 会提示唯一索引冲突。

    • 存储空间占用:varchar会占用额外的1~2字节来存储字符串长度。如果最大长度超过255,就需要2字节,否则1字节。

  • 存储引擎层区别

    • char和varchar都会存储字符串长度

    • 对于CHAR(N)字段,如果实际存储数据小于N字节,会填充空格到N个字节。

  • 性能对比

    • char填充空格可能导致浪费存储空间,进而导致性能下降

    • 大部分情况,最好使用varchar。

    • 极端情况:对应频繁修改的情况。

      • 例子:某个字段的最大长度是100字节,但是会频繁修改。如果使用char(100),则插入记录后就分配了100个字节,后续修改不会造成页分裂、页空隙等问题,而varchar(100)由于没有提前分配存储空间,后续修改时可能出现页分裂,进而导致性能下降。

  • varchar

    • 优点:节省空间,对性能有帮助

    • 缺点:可能会导致做多额外的工作,由于长度的变换

    • 适合情况

      • 字符串列最大的长度比平均的长度大很多

      • 列的更新少,碎片不是问题

      • 像utf-8等复杂的字符集,每个字符都使用不同的字节数进行存储

  • char

    • 适用的场景

      • 存储很短的字符串

      • 所有的值都接近同一个长度

    • 优点:对于经常变更的数据,不容易产生碎片,效率更高

    • 缺点:不够灵活

  • 22
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值