当前位置:   article > 正文

MySQL “Specified key was too long; max key length is 767 bytes”解决办法_specified key was too long; max key length is 767

specified key was too long; max key length is 767 bytes

对于参与索引的字段,增加字段长度时可能会出现错误“Specified key was too long; max key length is 767 bytes”。

因为数据库建立索引时允许的最大长度是767字节。如果开启innodb_large_prefix,则长度扩展至3072字节。

对于UTF-8而言,一个字符占3个字节,varchar(300)长度就是300*3=900字节>767字

 

方案一

启用innodb_large_prefix,将约束项扩展至3072byte。

  1. my.cnf配置:
  2. default-storage-engine=INNODB
  3. innodb_large_prefix=on

方案二

为索引字段指定长度。先删除原索引再重新创建 ,指定字段长度。

对于较长的字段,没必要整个都参与索引计算。只要指定字段的前几个字符,能较为有效地区分不同记录即可。这样既能达到索引效果,又能减小索引文件。

  1. ALTER TABLE `order`
  2. DROP KEY `idx_aaa`, -- 删除原索引
  3. DROP KEY `idx_bbb`,
  4. DROP KEY `idx_mix`,
  5. MODIFY `aaa` varchar(500) DEFAULT NULL COMMENT 'aaa', -- 修改字段长度
  6. MODIFY `bbb` varchar(500) DEFAULT NULL COMMENT 'bbb',
  7. ADD KEY `idx_aaa`(`aaa`(11)) USING BTREE, -- 重新添加索引,指定字段参与索引的长度
  8. ADD KEY `idx_bbb`(`bbb`(4)) USING BTREE,
  9. ADD KEY `idx_mix`(`ccc`(8),`ddd`(6)) USING BTREE;

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/606194
推荐阅读
相关标签
  

闽ICP备14008679号