問題の説明
ALGORITHM=INPLACEでステートメントを実行して、ApsaraDB RDS for MySQLインスタンスのVARCHARフィールドの長さを拡張すると、次のエラーメッセージが表示されます。
エラー1846 (0A000):ALGORITHM=INPLACEはサポートされていません。 理由: 列タイプINPLACEを変更できません。 ALGORITHM=COPYを試してください。
原因
ALGORITHM=INPLACEのステートメントを実行して、長さが256バイト未満のVARCHARフィールドの長さを拡張する場合、256バイト以上の長さに拡張することはできません。
次の表に、VARCHARフィールドの長さを拡張できる長さを示します。
延長前の長さ | 延長後の長さ |
256バイト未満 | 256バイト未満 |
256バイト以上 | 256バイト以上 |
詳細については、「公式MySQLドキュメント」をご参照ください。
VARCHAR(50)
の値50は、文字数を示します。 文字によって占有されるバイト数は、使用する文字セットによって異なります。
ASCII文字セットでは、1文字が1バイトを占める。 フィールドの長さを
VARCHAR(50)
からVARCHAR(100)
に拡張すると、文字の占めるバイト数が50から100に変わります。 この場合、ALGORITHM=INPLACEメソッドがサポートされます。UTF-8文字セットでは、1文字が最大3バイトを占めます。 フィールドの長さを
VARCHAR(50)
からVARCHAR(100)
に拡張すると、文字の占める最大バイト数が150から300に変わります。 この場合、ALGORITHM=INPLACEメソッドはサポートされていません。
ソリューション
長さが256バイト未満のVARCHARフィールドの長さを256バイト以上に拡張する必要がない場合は、ALGORITHM=INPLACEでステートメントを実行できます。
説明ALGORITHM=INPLACEでステートメントを実行してVARCHARフィールドの長さを拡張する場合は、ALGORITHM=INPLACEメソッドでサポートされている長さに基づいてフィールドの長さを拡張する必要があります。 詳細については、「原因」をご参照ください。
長さが256バイト未満のVARCHARフィールドの長さを256バイト以上に拡張する必要がある場合は、ALGORITHM=COPYでステートメントを実行できます。
例:
ALTER TABLE 'table1' CHANGE COLUMN'col1' VARCHAR(256) デフォルトNULL、ALGORITHM=COPY、LOCK=NONE;