ホームページ > データベース > mysql チュートリアル > MySQL エラー #1071: 「指定されたキーが長すぎます。最大キー長は 767 バイトです」を解決するには?

MySQL エラー #1071: 「指定されたキーが長すぎます。最大キー長は 767 バイトです」を解決するには?

Linda Hamilton
リリース: 2024-12-13 19:41:19
オリジナル
187 人が閲覧しました

MySQL Error #1071: How to Resolve

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート