问题现象
在RDS MySQL实例中,使用INPLACE方式扩展VARCHAR字段长度时,提示如下错误:
ERROR 1846 (0A000):ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
可能原因
使用INPLACE方式扩展VARCHAR字段长度时,不支持将小于256字节的字段扩展为等于或大于256字节的字段。
支持扩展的字段长度范围为:
扩展前 | 扩展后 |
小于256字节 | 小于256字节 |
等于或大于256字节 | 大于256字节 |
使用INPLACE方式扩展VARCHAR字段的详情,请参见MySQL官方文档。
说明
VARCHAR(50)
中的50指字符长度,其占用的字节数与字符集有关:
从对于ascii字符集,1个字符占用1个字节,从
VARCHAR(50)
扩展到VARCHAR(100)
,占用字节从50字节变为100字节。此时,支持INPLACE方式。对于utf8字符集,1个字符最多占用3个字节,从
VARCHAR(50)
扩展到VARCHAR(100)
,占用字节从150字节变为300字节。此时,不支持INPLACE方式。
解决方案
如果您不需要将小于256字节的VARCHAR字段长度扩展为等于或大于256字节的字段长度,可使用INPLACE方式,即将ALGORITHM参数设置为INPLACE。
说明在使用INPLACE方式扩展VARCHAR字段长度时,请根据INPLACE方式支持扩展的字段长度范围进行扩展,详情请参见可能原因。
如果您需要将小于256字节的VARCHAR字段长度扩展为等于或大于256字节的字段长度,可使用COPY方式,即将ALGORITHM参数设置为COPY。
命令示例如下:
ALTER TABLE `table1` CHANGE COLUMN `col1` VARCHAR(256) DEFAULT NULL, ALGORITHM=COPY;
文档内容是否对您有帮助?