PolarDB 支持快速扩展VARCHAR类型字段。根据VARCHAR列长度的扩展范围不同,内核会自动选择INPLACE 方式和COPY DDL 方式:
当VARCHAR列扩展前后的长度不跨越255 bytes,如从0-255Bytes,或者从256Bytes到更大的范围时,PolarDB MySQL支持只修改元数据。此时无需进行进行表重建,可以“秒级”完成。
当修改VARCHAR列长度跨越255 bytes,也即从小于255Bytes到大于255Bytes的长度时,PolarDB默认走Copy DDL类型,即全程都是锁表的,不支持DML写操作,仅支持读操作。若您业务需要在DDL期间进行写入,您可以参考此
文档使用DMS的无锁变更功能进行DDL操作。
当用户不确定自己修改VARCHAR列的范围是否满足上述条件时,可以手动指定ALGORITHM=INPLACE ;如果不支持快速列扩展,会直接报错。例如
注1:VARCHAR类型的字段最大占用存储字节长度与字符集有关。如UTF8MB4,VARCHAR(80)的字段,其最大存储字节长度为 单个字符最大编码字节(4 bytes)* 最大字符数(80)= 320 bytes。
注2:VARCAHR类型属于变长存储类型,磁盘仅存储实际长度,因此建议用户在使用VARCHAR字段时,考虑将最大长度直接调整到255以上,避免扩展字段时可能需要走COPY算法。