VARCHAR データ型の列を含む MySQL テーブルに一意のキー制約を追加すると、次のエラーが発生する場合があります:
#1071 - Specified key was too long; max key length is 767 bytes
このエラーは、VARCHAR 列を合わせた長さが以下の場合でも発生します。キーの最大長。MySQL バージョン 5.6 以前では 767 バイトです。
MySQL バージョン 5.6 以前の InnoDB テーブルのプレフィックス制限は 767 バイトです。これは、キー列のプレフィックスを組み合わせた長さがこの制限を超えることができないことを意味します。 MyISAM テーブルの場合、キーの最大長は 1,000 バイトです。
この例では、列 column1 と column2 のデータ型はそれぞれ VARCHAR(20) と VARCHAR(500) です。これは、合計の長さが 522 バイトになることを意味し、767 バイト制限未満に十分なマージンが残ることになります。ただし、エラー メッセージは、これが当てはまらないことを示しています。
エラーの理由は、MySQL が VARCHAR カラムに可変長のマルチバイト エンコーディングを使用しているためです。これは、VARCHAR 列の各文字をさまざまなバイト数で表現できることを意味します。たとえば、VARCHAR(20) 列は最大 20 文字を保持できますが、UTF-8mb4 などのワイド文字形式でエンコードされている場合、各文字は最大 3 バイトを占める可能性があります。 、キーの実際の長さは、各列に格納できる文字列の最大長によって決まります。この場合、column1とcolumn2の文字列の最大長は、それぞれ20
3バイト = 60バイト、5003バイト = 1500バイトです。これにより、合計 60 1500 = 1560 バイトとなり、最大キー長の 767 バイトを超えます。解決策
以上が一意のキーを作成するときに MySQL エラー #1071: 最大キー長を超えましたが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。