MySQL:Specified key was too long; max key length is 767 bytes.

2355 ワード

テーブル文:
CREATE TABLE IF Not EXISTS api (
    api  varchar(500) not null ,
    method varchar(50) not null default 'POST',

    PRIMARY key (api,method)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

エラー:
Specified key was too long; max key length is 767 bytes.

理由:
ここでapi,methodを使用してapiテーブルの結合プライマリ・キーを作成します.この場合、charsetはutf 8、すなわち1文字3バイトで、合計インデックスのバイトは500*3+50*3=1650バイトですが、mysqlが要求するインデックスは767ワード・セクションです.
解決:
apiフィールドをvarchar(200)、methodをvarchar(20)に変更
 
または、フィールドの最初のn文字をインデックスに限定することもできます.参照:https://blog.csdn.net/u010429286/article/details/80418666解決する
UNIQUE KEY `uniq_store_code` (`record_date`,`store_code`(20),`sku_division_code`(20),`abc`(20))

表示後store_code,sku_division_code,abcの3つのフィールドは上位20文字を一意のインデックスとして取り,これにより長さが超えない.