MySQL エラー #1071: キーの長さの制約について
データベース テーブルの一意のキーを作成しようとすると、次のエラーが発生します:
#1071 - Specified key was too long; max key length is 767 bytes
エラー メッセージは、指定されたキーが最大許容長を超えていることを示しますInnoDB テーブルの場合、767 バイトです。この動作は、MySQL の以前のバージョン (5.6 以前など) でよく見られます。
VARCHAR 列のバイト計算
VARCHAR(20) 型の列 column1 があります。列 2 の型は VARCHAR(500) です。最初は、キーに 21 501 = 522 バイトが必要で、これは 767 バイト未満であると想定するかもしれません。しかし、この想定は誤りです。
プレフィックス長の制限について
MySQL のドキュメントには、キーの最大プレフィックス長は 767 バイトであると記載されています。この長さの制限は、キーに含まれる列の合計の長さに適用されます。この場合、キーの合計の長さは 21 500 = 521 バイトで、767 バイト未満です。
ただし、プレフィックスの長さの制限は、実際には列で使用される文字エンコーディングに依存することに注意することが重要です。 VARCHAR(20) などの非 Unicode 列の場合、各文字に 1 バイトが必要です。ただし、VARCHAR(500) utf8_general_ci などの Unicode 列の場合、各文字に複数のバイトが必要になる場合があります。
Unicode 列のバイト計算
この場合、column2 は次のようになります。 Unicode 列。 utf8_general_ci 文字セットは、1 文字あたり最大 3 バイトを使用します。したがって、Unicode 列の実際のキーの長さは、文字の長さに 1 文字あたりのバイト数を乗算して計算されます。
20 bytes (column1) + (500 bytes * 3 bytes per character) = 1501 bytes
解決策: キー プレフィックスを短縮する
キーの長さが上限を超えているため、キーのプレフィックスを短くすることでエラーを解決できます。これは、column2 にインデックス付けされる文字数を制限することで実現できます。例:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
この調整により、キーの合計長は 21 (200 * 3) = 621 バイトに減少し、767 バイトのプレフィックス長制限に準拠するようになります。
以上がMySQL エラー #1071: 「指定されたキーが長すぎます。最大キー長は 767 バイトです」を解決するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。