当前位置:   article > 正文

Mysql 的char 和varchar的的区别

Mysql 的char 和varchar的的区别

1、char 和varchar 区别

下面以utf8字符集为例,char和varchar的占比计算,如下图
valueChar(5)bytesVarchar(5)bytesVarchar(100)bytes
‘’‘   ’15‘’1‘’1
‘abcd’‘abcd ’15‘abcd’13‘abcd’13
'abcde''abcde'15'abcde'16'abcde'16

        varchar使用额外的1到2字节来存储值得长度。如果列的最大长度小于或等于255,则使用1字节,否则使用2字节。以utf8字符集举例,即一个字符占用3个字节,N理论上能取到的值是(65535-2)/3=21844 。char(1)字符串对于单字节字符来说只会占用1个字节,但是varchar(1)会占用2个字节,其中1个字节用来存储长度信息。

     使用varchar(5)和varchar(100)保存‘abcde’占用的空间虽然都一样,但越大的
列会使用越多的内存,因为MySQL通常会分配固定大小的内存块来保存值。简单的
说,就是使用字符类型中定义的长度,即100个字符空间。所以如果你的MySQL内存
占用过高也有可能是因为返个原因,如基亍排序、使用基亍内存的临时表等等,磁盘
I/O也会激增。所以在使用varchar的时候一定要分配刚好就行。

     从碎片角度迕行考虑,使用CHAR字符型时,由亍存储空间都是一次性分配的。为此
某个字段的内容,其都是存储在一起的。单从返个角度来讲,其丌存在碎片的困扰。
而可变长度的字符数据类型,其存储的长度是可变的。当其更改前后数据长度丌一致
时,就丌可避免的会出现碎片的问题。故使用可变长度的字符型数据时,时丌时的对
碎片迕行整理。如执行数据库导出导入作业,来消除碎片。

2、怎么选择char 还是varchar

  char最佳的使用方案就是 存储很短的字符串戒者长度近似相同的字符串的时候非常有用。如固定长度的MD5、 定长值、短网址,存储用户的身份证号码、性别等等。其他的场景建议用varchar
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/490269
推荐阅读
相关标签
  

闽ICP备14008679号