踩坑mysql报错MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes

22 篇文章 4 订阅

报错信息:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes

这个是flowable引擎自动创建表的时候报的错,建表语句如下:

CREATE TABLE flowable_test.ACT_ADM_SERVER_CONFIG (ID_ VARCHAR(255) NOT NULL, NAME_ VARCHAR(50) NULL, DESCRIPTION_ VARCHAR(255) NULL, SERVER_ADDRESS_ VARCHAR(100) NULL, PORT_ INT NULL, CONTEXT_ROOT_ VARCHAR(100) NULL, REST_ROOT_ VARCHAR(100) NULL, USER_NAME_ VARCHAR(100) NULL, PASSWORD_ VARCHAR(100) NULL, ENDPOINT_TYPE_ INT NULL, TENANT_ID_ VARCHAR(50) NULL, CONSTRAINT PK_ACT_ADM_SERVER_CONFIG PRIMARY KEY (ID_))

原因是myql用的是utf8mb4字符集,descirption_ 字段类型为varchar255,长度为256*4>767报错了。

分析:创建索引时,有单列索引限制。上单列索引限制767,起因是256×3-1。这个3是字符最大占用空间(utf8)。但是在5.5以后,开始支持4个字节的utf8mb4。255×4>767, 于是增加了一个参数叫做 innodb_large_prefix,这个参数默认值是OFF。当改为ON时,允许列索引最大达到3072。
解决:

1.设置变量innodb_large_prefix innodb_file_format

SET GLOBAL innodb_large_prefix = ON;
SET GLOBAL innodb_file_format=Barracuda;


2.创建表的时候,增加语句:

ROW_FORMAT = DYNAMIC


测试数据库版本:Server version: 5.6.35 MySQL Community Server (GPL)

到这里flowable的问题就解决完了,后续还有个引申问题创建索引的限制。

索引列总长度的不能大于3072 bytes的限制。当把3个varchar255的字段合起来建索引会报错,加下面这句就好了

SET GLOBAL innodb_file_per_table = ON;

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值