建表語句: 報錯: 原因: 我這裡使用 api,method 來做 api 表的聯合主鍵,此時會根據這兩個欄位建立索引,charset 是 utf8 ,也就是一個字元3個位元組, 那麼總共索引的位元組為: 500*3+50*3 = 1650 個位元組,而mysql 要求的索引是 767 個位元組。 解決: ...
建表語句:
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 是 utf8 ,也就是一個字元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三個欄位取前20字元作為唯一索引,這樣的話就是長度就不會超出。