MySQL的varchar类型字段

业务变化,前端要求增加一个传输字段的长度,得到的一些mysql varchar字段的知识;

 

目录

varchar长度是字符长度,不是字节长度:

VARCHAR的存储:   

VARCHAR的长度扩充--能不能快速


varchar长度是字符长度,不是字节长度:

现在使用的,应该都是 mysql5 以上的版本,所以才会说 varchar的长度是字符长度,不是字节长度;这个是mysql4到mysql5的变化,mysql4和以前版本,varchar是按照字节长度来算的;到了mysql5开始,按照字符来算;

 

VARCHAR的存储:   

varchar是可变长度的字段类型,可以从0---65535(行最大长度65535bytes)

     varchar会使用1个字节,或者2个字节(byte)放在在数据前,表示数据有多少字节(bytes);如果字段长度不超过255字节那就使用1byte,否则使用2bytes;

( 这一段,mysql5.7的文档和8.0的文档中,一模一样;
      https://dev.mysql.com/doc/refman/5.7/en/char.html
      https://dev.mysql.com/doc/refman/8.0/en/char.html

按照第一条,varchar(X)的字节长度是 X * character set 长度;

    如果使用了 utf8,那么一个字符就是3个字节;varchar(6)的长度是 : 6*3=18字节;

VARCHAR的长度扩充--能不能快速

varchar的长度扩充,在mysql5.6或以下版本,varchar字段扩充长度,都需要对每个单元格进行copy处理;

在mysql5.6以上的版本,如果满足一定的条件,增加参数 ALGORITHM=INPLACE,就可以瞬间完成;

那是什么条件呢? 就是上述第二点中的说明,varchar在存储时,会使用1byte或者2byte来表示value的长度;字段扩充后,如果这个标识的长度不变化,就可以瞬间完成,否则只能数据重写了;

MySQL的varchar类型字段_第1张图片

你可能感兴趣的:(db,技术区)