建表语句:
- 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 个字符为索引, 参考: 来解决
UNIQUE KEY `uniq_store_code` (`record_date`,`store_code`(20),`sku_division_code`(20),`abc`(20))
表示后面 store_code,sku_division_code,abc 三个字段取前 20 字符作为唯一索引, 这样的话就是长度就不会超出.
来源: http://www.bubuko.com/infodetail-3209615.html