すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:1846 (0A000): ALGORITHM=INPLACEはサポートされません。 理由: 列タイプINPLACEを変更できません。 ALGORITHM=COPYをお試しください。ApsaraDB RDS for MySQLインスタンスを使用すると、エラーメッセージが表示されます。 どうすればよいですか。

最終更新日:Jan 23, 2024

問題の説明

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;