设为首页 收藏本站
查看: 300|回复: 0

[经验分享] Jbpm 4.3与mysql 6 的“Bug” :Specified key was too long; max key length is 767 bytes

[复制链接]

尚未签到

发表于 2016-10-23 10:39:11 | 显示全部楼层 |阅读模式
 
 
环境:
mySql版本:6.0 Engine=InnoDB charset = utf8
 
语句:
create table JBPM4_EXECUTION (DBID_ bigint not null, CLASS_ varchar(255) not null, DBVERSION_ integer not null, ACTIVITYNAME_ varchar(255), PROCDEFID_ varchar(255), HASVARS_ bit, NAME_ varchar(255), KEY_ varchar(255), ID_ varchar(255) unique, STATE_ varchar(255), SUSPHISTSTATE_ varchar(255), PRIORITY_ integer, HISACTINST_ bigint, PARENT_ bigint, INSTANCE_ bigint, SUPEREXEC_ bigint, SUBPROCINST_ bigint, PARENT_IDX_ integer, primary key (DBID_))
 
错误:
17:14:37,805 SEV | [SchemaExport]:Specified key was too long; max key length is 767 bytes
 
资料:
Cause

The maximum key length for the MySQL database for InnoDB Engine is 767 bytes. The key length includes the sum lengths of all the columns included in the key.

Solutions

There are several solutions for this issue:


  • Changing the size of some columns. For example, if VARCHAR(300) is used to store last names, you can reduce its size to 100 with minimal risk of data loss.


  • Specifying the partial column length for the character columns in the key. For example, for VARCHAR(1000) column, you can specify only 100 characters to be used in the key.
        ALTER TABLE department

         ADD PRIMARY KEY (id, name(100));

In this example only 100 bytes of the NAME column participate in the primary key.


  • Using a different set of columns for the key.
参考:

http://www.ispirer.com/wiki/sqlways/troubleshooting-guide/mysql/import/key-too-long

也可以参考这个,了解一下引擎为myisaminnob的表对key最大长度的限制不一样:

http://yubowei.blog.iyunv.com/978243/223773

 

从上面我们知道引擎为innodbMysqlkey最大长度为767bytes ,而在sql语句中我们这样设置的varchar(255),

 

1.        根据数据库字符编码:
MySQLvarchar主键只支持不超过768个字节 或者 768/2=384个双字节 或者 768/3=256个三字节的字段
GBK是双字节的,UTF-8是三字节的。(来自:http://www.java2000.net/p14993

根据《xml开发技术教程》中的编码详解:utf-8是变长编码,对于7位基本ASCII字符,仅用1一个字节;而其他字符使用1-3个字节编码,这么说来urf-8最多为3个字节。

2.        Mysql中数据类型varchar : String, length 0 - 255
“255*3=765<767” 我们看出varchar(255)所占的字节数肯定是没有超出最大长度的。

==============================================================================至此告一段落

 

接下来需要对mysqlkey的理解以及理解这句E文“The key length includes the sum lengths of all the columns included in the key.”

mysqlculomn key有如下几种:uni mul pri 等。(http://hlbng.iyunv.com/blog/382457)

这句E文说的意思为:最大长度为所有key的长度之和。

 

回到sql语句:其中有两种keyuni pri ;一个为:primary key (DBID_) ,一个为ID_ varchar(255) unique

DBID_bigint类型,bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),存储大小为 8 个字节。(http://blog.csdn.net/Ivanluc/archive/2010/01/11/5174468.aspx 及其 http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html)

于是就有:“(255*3+8=  773  >  767” (原因所在:超过了最大长度)。

 

改成 “(252*3+8=  764  <  767” (所想解决办法)

create table JBPM4_EXECUTION (DBID_ bigint not null, CLASS_ varchar(255) not null, DBVERSION_ integer not null, ACTIVITYNAME_ varchar(255), PROCDEFID_ varchar(255), HASVARS_ bit, NAME_ varchar(255), KEY_ varchar(255), ID_ varchar(252) unique, STATE_ varchar(255), SUSPHISTSTATE_ varchar(255), PRIORITY_ integer, HISACTINST_ bigint, PARENT_ bigint, INSTANCE_ bigint, SUPEREXEC_ bigint, SUBPROCINST_ bigint, PARENT_IDX_ integer, primary key (DBID_));

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

 

反复查看这条sql语句,key只有这两个。

极限修改:将“ID_ varchar(252) unique 改成 ID_ varchar(20) unique 成功。

 

=========“(252*3+8=  764  <  767” 这个修改应该可以的========

 

兵临城下,解决问题再说,更改表的EngineInnoDB –> myisam

Set strorage_engine = myisam ;

存储引擎为myisam不支持事务管理。(http://taito.iyunv.com/blog/314919

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-290175-1-1.html 上篇帖子: hibernate使用HQL操作MYSQL数据库里面的Order By排列顺序是乱的(原创) 下篇帖子: spider storage engine实践时遇到[Mysql::Error: This xid is already exist: COMMIT]的解决办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表