ホームページ >データベース >mysql チュートリアル >MySQL がエラー #1071:「指定されたキーが長すぎます」をスローするのはなぜですか?

MySQL がエラー #1071:「指定されたキーが長すぎます」をスローするのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-14 14:59:10539ブラウズ

Why Does MySQL Throw Error #1071:

MySQL エラー #1071: キーの長さの制約の詳細

2 つの VARCHAR に一意のキー制約を追加して MySQL テーブルを変更しようとしたとき列を作成すると、「#1071 - 指定されたキーが長すぎます; キーの最大長」というやや複雑なエラー メッセージが表示されます。は 767 バイトです。」どちらのカラムのサイズも 767 バイト制限内にあるように見えますが、このエラーを理解するには、MySQL のキーの長さの制約をさらに深く掘り下げる必要があります。

キーの長さの制限の再確認

MySQL バージョン 5.6 以前のキーの最大長は、InnoDB テーブルでは実際に 767 バイトです。 MyISAM テーブルの場合は 1,000 バイト。ただし、MySQL バージョン 5.7 以降では、この制限はさらに大きい 3072 バイトに拡張されました。

VARCHAR ストレージのデコード

一方、VARCHAR データ型は最大値を示唆しています。それぞれの列のストレージが 20 バイトと 500 バイトである場合、この計算には文字エンコーディングは考慮されません。 VARCHAR フィールドが utf8mb4 形式でエンコードされている場合、インデックス プレフィックスの最大長は効果的に 4 分の 1 に減り、その結果、わずか 191 バイト (767 / 4) になります。

回避策の見つけ方

この問題を解決するには、次のいずれかの実装を検討してください。戦略:

  • 列サイズの削減: インデックス接頭辞の長さの制約を満たすように VARCHAR フィールドの最大長を制限します。
  • 列のサブセット: インデックス作成に列の一部のみを使用することで、キーの長さを短縮します。例: ALTER TABLE mytable ADD UNIQUE ( column1(15), column2(200) );
  • データ モデルの確認: テーブル設計を再評価し、次のような代替アプローチがあるかどうかを検討します。この MySQL の制限に遭遇することを回避できます。

以上がMySQL がエラー #1071:「指定されたキーが長すぎます」をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。