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

ApsaraDB RDS:ApsaraDB RDS for MySQLインスタンスがエラー1709を報告した場合はどうすればよいですか。

最終更新日:Jan 22, 2024

症状

インデックスを作成すると、システムは次のエラーを報告する場合があります。
エラー1709 (HY000): インデックス列サイズが大きすぎます。 最大列サイズは767バイトです。

原因

InnoDBストレージエンジンで許可されるインデックス付きフィールドの最大長は767バイトです。 マルチバイトのフィールドまたは複数のフィールドにインデックスを作成すると、このエラーが報告されることがあります。
説明 たとえば、utf8mb4は4バイトの文字セットです。 utf8mb4文字セットで許可されるデフォルトのインデックス付きフィールドの長さは、次の式に基づいて191文字です。767バイト /4バイト /文字 ≒ 191文字。 varchar (255) 型またはchar (255) 型のフィールドにインデックスを作成すると、インデックスの作成は失敗します。 詳細については、MySQLの公式WebサイトのMySQLドキュメントを参照してください。

解決策

  1. ApsaraDB for RDSコンソールにログインし、[パラメーター] ページに移動します。 [編集可能なパラメーター] タブで、innodb_large_prefixパラメーターを見つけ、その値をOnまたは1に変更して、[変更の適用] をクリックします。innodb_large_prefix
    説明 innodb_large_prefixON 1に設定すると、DYNAMICまたはCOMPRESSED行形式でInnoDBが許可するインデックス付きフィールドの最大長が3,072バイトに増加します。
  2. テーブル作成時に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;