问题现象
在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;
该文章对您有帮助吗?