MySQL:Specified key was too long; max key length is 767 bytes.
建表语句:
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字符作为唯一索引,这样的话就是长度就不会超出。
如果是此文是转载文章,本人会附上转载链接,此篇文章的版权归原创作者所属,如果侵权请与我联系,我会删除此文。
若没有标明转载链接,此篇文章属于本人的原创文章,其版权所属:
作者:feiquan
出处:http://www.cnblogs.com/feiquan/
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(*/ω\*)
若没有标明转载链接,此篇文章属于本人的原创文章,其版权所属:
作者:feiquan
出处:http://www.cnblogs.com/feiquan/
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(*/ω\*)