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

ApsaraDB RDS:インデックス作成時に RDS MySQL が「Error 1709: Index column size too large. The maximum column size is 767 bytes」をレポートする

最終更新日:Nov 09, 2025

問題の説明

RDS MySQL の large フィールドにインデックスを作成しようとすると、次のエラーが発生することがあります。

ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.

原因

MySQL の InnoDB エンジンは、インデックスフィールドの長さを 767 バイトに制限します。マルチバイト文字セットを持つ large フィールドや複数のフィールドの組み合わせの場合、制限を超えるとインデックスの作成時にこのエラーがトリガーされます。

説明

たとえば、4 バイト文字セットである utf8mb4 文字セットでは、サポートされるインデックスフィールドの最大長は 191 文字です (767 バイト/文字あたり 4 バイト ≈ 191 文字)。したがって、varchar(255) または char(255) 型のフィールドにインデックスを作成すると失敗します。詳細については、「MySQL ドキュメント」をご参照ください。

解決策

  1. RDS コンソールにログインし、[パラメーター] ページinnodb_large_prefix パラメーターを ON に変更し、[パラメーターの送信] をクリックします。

    説明

    innodb_large_prefix

  2. テーブルの row_format を調整します。

    • 新しいテーブルを作成するときに、row_format を Dynamic または Compressed として指定できます。次の例をご参照ください。

      CREATE TABLE idx_length_test_02 (
          id INT AUTO_INCREMENT PRIMARY KEY,
          name VARCHAR(255)
      ) ROW_FORMAT=DYNAMIC DEFAULT CHARSET=utf8mb4;
    • 既存のテーブルの場合、次のコマンドを使用して row_format を変更できます。

      ALTER TABLE <table name> ROW_FORMAT=DYNAMIC;
      ALTER TABLE <table name> ROW_FORMAT=COMPRESSED;

これらの操作が完了したら、再度インデックスを作成して、エラーが発生しなくなったことを確認します。