ホームページ > データベース > mysql チュートリアル > 一意のキーを作成するときに MySQL エラー #1071: 最大キー長を超えましたが発生するのはなぜですか?

一意のキーを作成するときに MySQL エラー #1071: 最大キー長を超えましたが発生するのはなぜですか?

DDD
リリース: 2024-12-14 08:04:11
オリジナル
170 人が閲覧しました

Why am I getting MySQL Error #1071: Maximum Key Length Exceeded when creating a unique key?

MySQL エラー #1071: 最大キー長を超えました

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バイト、500

3バイト = 1500バイトです。これにより、合計 60 1500 = 1560 バイトとなり、最大キー長の 767 バイトを超えます。解決策

この問題を解決するには、次の解決策を検討できます。

    VARCHAR 列の最大長を減らします。
  • たとえば、column1 のデータ型を VARCHAR(15) に変更できます。
  • 短いキー プレフィックスを使用します。
  • column2 フィールド全体にインデックスを作成する代わりに、column2 フィールドのサブセットのみを使用できます。 column2(200) など。
  • より長いキー長をサポートする別のテーブル エンジンを使用してください。
  • MyISAM テーブルの最大キー長は 1,000 バイトで、要件には十分な場合があります。
  • MySQL バージョン 5.7 以降にアップグレードしてください。
  • MySQL 5.7 以降のバージョンの最大キー長は3072 バイト。柔軟性がさらに高まります。

以上が一意のキーを作成するときに MySQL エラー #1071: 最大キー長を超えましたが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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