症状
インデックスを作成すると、システムは次のエラーを報告する場合があります。
エラー1709 (HY000): インデックス列サイズが大きすぎます。 最大列サイズは767バイトです。
原因
InnoDBストレージエンジンで許可されるインデックス付きフィールドの最大長は767バイトです。 マルチバイトのフィールドまたは複数のフィールドにインデックスを作成すると、このエラーが報告されることがあります。
説明 たとえば、utf8mb4は4バイトの文字セットです。 utf8mb4文字セットで許可されるデフォルトのインデックス付きフィールドの長さは、次の式に基づいて191文字です。767バイト /4バイト /文字 ≒ 191文字。 varchar (255) 型またはchar (255) 型のフィールドにインデックスを作成すると、インデックスの作成は失敗します。 詳細については、MySQLの公式WebサイトのMySQLドキュメントを参照してください。
解決策
- ApsaraDB for RDSコンソールにログインし、[パラメーター] ページに移動します。 [編集可能なパラメーター] タブで、innodb_large_prefixパラメーターを見つけ、その値をOnまたは1に変更して、[変更の適用] をクリックします。
説明 innodb_large_prefixをON 1に設定すると、DYNAMICまたはCOMPRESSED行形式でInnoDBが許可するインデックス付きフィールドの最大長が3,072バイトに増加します。 - テーブル作成時にDYNAMICまたはCOMPRESSEDの行形式を指定します。 例:
テーブルidx_length_test_02を作成する ( id int auto_incrementプライマリキー, 名前varchar(255) ) ROW_FORMAT=DYNAMICデフォルトcharset utf8mb4;説明 作成されたテーブルの場合、次のコマンドを実行して、行形式をDYNAMICまたはCOMPRESSEDに変更できます。テーブルを変更 <テーブルの名前> row_format=dynamic; alter table <テーブルの名前> row_format=compressed;