MySQL中 char和varchar的区别

1. 最大字符长度

  • CHAR(M)最大长度为255字节(2^{8}-1)
  • VARCHAR(M)最大长度是65532字节(2^{16}-1)

2. 长度是否可变

  • CHAR是定长的,这意味着,当你定义的字段类型是CHAR(32),那么无论你存1个还是10个字符,数据库都是分配32个字符的空间。而后面没用完的,就用空格填充。
  • VARCHAR是变长的,这意味着,当你定义VARCHAR(32)的字段,存1个字符就占1个空间、存10个就占10个空间,不进行额外填充。此外,VARCHAR值存储的时候是“ 长度前缀+数据”,长度前缀为1字节或2字节,如果值不超过255个字节,那么长度是1字节(8位就够了),如果长度超过255个字节,那么长度就是2个字节(8位不够,需要16位)

3. 取数据的不同

  • 数据库取CHAR值时,尾部的空格会被删除;
  • 数据库取VARCHAR值时,尾部的空格仍然保留。

4. 性能对比

  • 从空间上考虑,一般VARCHAR更好,因为没有多余的空格填充。之所以说“一般”是因为当字符串比较短时,VARCHAR额外的一个字节的长度前缀还是要考虑的。
  • 从时间上考虑,CHAR更好。VARCHAR是按需分配空间,当字符串长度或者长度前缀变大,导致原来分配的空间无法满足存储需求时,系统会进行额外的操作。

5. 适用场景

  • 长度固定或者长度变化不大的字符串,用CHAR
  • 长度变化较大的字符串,用VARCHAR
  • 此外,要结合实际的需求考虑,比如磁盘空间、响应速度等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值