MySQL的varchar类型字段
业务变化,前端要求增加一个传输字段的长度,得到的一些mysql 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的长度;字段扩充后,如果这个标识的长度不变化,就可以瞬间完成,否则只能数据重写了;
本文地址:https://blog.csdn.net/cfy_zybing/article/details/107323460