問題現象
在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;