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-Specified key was too long-不明白为啥? [复制]
MySQL5.7报错–initialize specified but the data directory has files