[解決済み】MySQLエラー#1071 - 指定されたキーが長すぎる; キーの最大長は767バイトです。
質問
以下のコマンドを実行したところ
ALTER TABLE `mytable` ADD UNIQUE (
`column1` ,
`column2`
);
このようなエラーメッセージが表示されました。
#1071 - Specified key was too long; max key length is 767 bytes
column1、column2に関する情報。
column1 varchar(20) utf8_general_ci
column2 varchar(500) utf8_general_ci
思うに
varchar(20)
は21バイトしか必要としないのに対し
varchar(500)
は501バイトしか必要ありません。つまり、合計バイト数は522バイトとなり、767バイトを下回る。では、なぜエラーメッセージが表示されたのでしょうか?
#1071 - Specified key was too long; max key length is 767 bytes
解決方法は?
MySQL バージョン 5.6 で 767 バイト。 (およびそれ以前のバージョン)では 記載された接頭辞の制限 InnoDBテーブルの場合。MyISAMテーブルでは1,000バイト長です。この制限は 3072 bytes MySQL バージョン 5.7 では (およびそれ以上)です。
また、大きな文字(char)のインデックスを設定した場合や
varchar
フィールドが
utf8mb4
でエンコードされている場合、 インデックスプリフィックスの最大長である 767 バイト (あるいは 3072 バイト) を 4 で割った結果が以下のようになります。
191
. これは
utf8mb4
文字は4バイトです。このため
utf8
文字の場合、3 バイトとなり、最大インデックスプリフィックスの長さは
255
(またはヌルターミネータを引いた254文字)。
に下限を設けるという方法もあります。
VARCHAR
フィールドを作成します。
もう一つの選択肢は、( この問題に対する回答 ) は、全額ではなく、列の部分集合を取得する、すなわち。
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
キーを適用するために必要な微調整を行いますが、このエンティティに関するデータモデルを見直して、MySQLの制限を受けることなく意図したビジネスルールを実装できるような改善が可能かどうかを確認する価値はあるかと思われます。
関連
-
[解決済み】#1273 - 不明な照合順序:'utf8mb4_unicode_520_ci'
-
[解決済み】mysqladmin: 'localhost'でのサーバーへの接続に失敗しました。
-
[解決済み】「docker container run」は最低1つの引数を必要とする
-
[解決済み] ローカルマシンからリモートDBをmysqldumpする方法
-
[解決済み] ルートユーザーでログインしているのに、phpMyAdminがデータベースを作成する権限がないと言う
-
[解決済み] MySQLの更新datetimeフィールド
-
[解決済み] MySQLのカラムを並べ替えるには?
-
[解決済み] SQLSTATE[22003]: 数値の範囲外: 1264 範囲外の値です。
-
[解決済み】Laravelのマイグレーションエラーです。シンタックスエラーまたはアクセス違反です。1071 指定されたキーが長すぎる。キーの最大長は767バイトです。
-
[解決済み] Laravelマイグレーション:ユニークキーが指定されても長すぎる
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】autoカラムは1つしか存在できない
-
[解決済み】SQL文が動作しない-「オペランド型の衝突:dateはintと互換性がない」。
-
[解決済み】MySQLエラー#1071 - 指定されたキーが長すぎる; キーの最大長は767バイトです。
-
[解決済み】MySQLのエラーコードです。MySQL WorkbenchでUPDATE中に1175のエラーが発生しました。
-
[解決済み】SQL ZOO 各大陸とアルファベット順で1位の国名をリストアップする
-
[解決済み】MySQLで日付を比較する
-
[解決済み] MySQLを使用したパーセンタイル値の計算
-
[解決済み] MySQLにおけるOracleのRowIDに相当する。
-
[解決済み] エラーコード1111。グループ関数の無効な使用
-
[解決済み] MySQLの グループ関数の無効な使用