Specified key was too long; max key length is 767 bytes
Posted zhangxingsheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Specified key was too long; max key length is 767 bytes相关的知识,希望对你有一定的参考价值。
这个异常是索引长度超出限制 767个字节。
在测试环境部署flowable时,程序创建flowable表时,出现了【Specified key was too long; max key length is 767 bytes】异常。 这个异常在开发环境是没有的。
建表sql:
CREATE TABLE `FLW_EVENT_DEPLOYMENT` ( `ID_` varchar(255) NOT NULL, `NAME_` varchar(255) DEFAULT NULL, `CATEGORY_` varchar(255) DEFAULT NULL, `DEPLOY_TIME_` datetime(3) DEFAULT NULL, `TENANT_ID_` varchar(255) DEFAULT NULL, `PARENT_DEPLOYMENT_ID_` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
开发环境mysql版本:10.4.13-MariaDB-1:10.4.13+maria~bionic-log 测试环境mysql版本:10.1.43-MariaDB-0ubuntu0.18.04.1
可以看出数据库版本不一样。
字符集长度计算:
utf8mb4 字符集是 1个字符=4个字节, ID_字节长度 = 255*4=1020字节 utf8 字符集是 1个字符=3个字节, ID_字节长度 = 255*3= 765字节 gbk字符集是 1个字符=2个字节, ID_字节长度 = 255*2= 510字节
可以看出utf-8 和 gbk 都是可以的。 所以当建表时设置utf-8字符集确实可以。 但是flowable的建表sql是在jar中的xml里,重新修改,编译源码太麻烦。
flowable的数据库是用户自己建的,所以在建库时设置数据的默认字符集
CREATE database flowable DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
重新启动项目,建表成功
以上是关于Specified key was too long; max key length is 767 bytes的主要内容,如果未能解决你的问题,请参考以下文章
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
1071 -Specified key was too long; max key length is 767 bytes
Laravel 5.6: Specified key was too long error
Specified key was too long; max key length is 767 bytes
hive报错: Specified key was too long; max key length is 767 bytes