MySQL 提示:MySql Specified key was too long; max key length is **** bytes

Posted 在奋斗的大道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 提示:MySql Specified key was too long; max key length is **** bytes相关的知识,希望对你有一定的参考价值。

今天在迁移生产环境测试库:房屋信息表(Base_House)

create table 'base_house'(
  `id` varchar(100) NOT NULL comment '主键',
  `tid` varchar(100) NOT NULL comment '地市编码',
  `ptid` varchar(100) NOT NULL comment '省编码',
  `fwbm` varchar(255) NOT NULL comment '房屋编码',
  `zrzbh` varchar(255) NOT NULL comment '自然幢编号/楼栋编号',
  `bdcdydm` varchar(255) NOT NULL comment '不动产单元代码'
  *****
  PRIMARY KEY (`id`),
  KEY `t_p_fwbm_union` (`tid`,`ptid`,`fwbm`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4  COLLATE=utf8mb4_0900_ai_ci COMMENT='房屋信息'

当执行到数据库中的`t_p_fwbm_union`索引创建的时候,遇到了“Specified key was too long; max key length is *** bytes”这样的报错。

问题原因

mysql 在建立索引时,数据库会先计算索引用到的字段长度(按下面比例乘起来不能超过限定的key长度1000):
latin1 = 1 byte = 1 character
uft8 = 3 byte = 1 character
gbk = 2 byte = 1 character

比如:

tid+ptid+fwbm三个字段累积长度为(100 + 100 + 255),当为utf8时,索引字段的长度为:(455*3) > 1000

解决方案

1. 查看MySQL数据库当前的配置;

show variables like 'innodb_large_prefix'; 

2. 修改配置

set global innodb_large_prefix=ON;//开启不限制索引长度

温馨提示:执行次此命令需要一定的权限,请联系管理员处理。

以上是关于MySQL 提示:MySql Specified key was too long; max key length is **** bytes的主要内容,如果未能解决你的问题,请参考以下文章

mysql的“The user specified as a definer (”@’%') does not exist”问题 解决

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

MySQL的错误:No query specified

关于mysql的错误 - no query specified

Mysql-Specified key was too long-不明白为啥? [复制]

MySQL5.7报错–initialize specified but the data directory has files