背景:一直以来都认为MySQL字段扩容时,对于255以内的扩容时可以inplace的,今天处理一个工单,发现字段本身超过255时再进行扩容,仍可以inplace,算是纠正一下知识点盲区。
原理:varchar字段255以内时,使用一个字节来记录长点,超过255时使用2个字节记录,跨记录长度标识的时候即255以内扩容到255以上时,无法使用inplace,只能使用copy方式重建表。未跨255时通过修改数据字典的方式通过inplace进行。
文档:
https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html
验证:
以utf8字符集表为例,255字节时,varchar长度为255/3=85,即以85为跨度,85以内的字段长度扩容不超过85时、以及85以上长度继续扩容时则可以使用inplace算法,85以内长度字段扩容超过85以上长度时需要使用copy算法。
版本:适用于5.7、8.0、8.4

盲区纠正-MySQL字段扩容是否锁表
原创
©著作权归作者所有:来自51CTO博客作者浮生凤年的原创作品,请联系作者获取转载授权,否则将追究法律责任
下一篇:mysqldump报错排查
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
















