文档

MySQL提示“1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.”

更新时间:

问题现象

在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, LOCK=NONE;

  • 本页导读 (1)