环境:
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
也可以参考这个,了解一下引擎为myisam与innob的表对key最大长度的限制不一样:
http://yubowei.blog.51cto.com/978243/223773
从上面我们知道引擎为innodb的Mysql的key最大长度为767bytes ,而在sql语句中我们这样设置的varchar(255),
1. 根据数据库字符编码:
MySQL的varchar主键只支持不超过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)所占的字节数肯定是没有超出最大长度的。
==============================================================================至此告一段落
接下来需要对mysql中key的理解以及理解这句E文“The key length includes the sum lengths of all the columns included in the key.”
在mysql中culomn key有如下几种:uni , mul , pri 等。(http://hlbng.iteye.com/blog/382457)
这句E文说的意思为:最大长度为所有key的长度之和。
回到sql语句:其中有两种key:uni , 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” 这个修改应该可以的========
兵临城下,解决问题再说,更改表的Engine:InnoDB –> myisam
Set strorage_engine = myisam ;
存储引擎为myisam不支持事务管理。(http://taito.iteye.com/blog/314919)
分享到:
相关推荐
jbpm jbpm4.3.jar DDDDDDDD
SSH+JBPM4.3的整合是企业级应用开发中的一种常见组合,SSH指的是Spring、Struts和Hibernate这三个开源框架的集成,而JBPM4.3则是一个强大的工作流管理系统,用于实现业务流程自动化。这篇内容将深入探讨这两个技术...
### jbpm4.3与Spring框架的整合指南 在企业级应用开发中,流程管理引擎JBPM(JBoss Business Process Management)与Spring框架的结合使用是常见的一种技术方案。JBPM是一个灵活、强大的业务流程管理工具,而Spring...
**jbpm4.3:开启开源工作流新篇章** jbpm4.3是一个强大的开源工作流管理系统,它允许开发者和业务分析师以图形化的方式设计、执行和管理业务流程。这个工具的核心在于将复杂的业务逻辑转化为计算机可以理解并执行的...
【JBPM4.3培训学习视频】是一套针对初学者设计的教程,旨在帮助学习者掌握JBPM4.3这一企业级工作流管理系统的核心概念和技术。JBPM是Java Business Process Management的缩写,是一个开源的工作流和业务流程管理平台...
NULL 博文链接:https://sunlujing.iteye.com/blog/914429
jbpm4.3是JBoss Business Process Management (BPM) Suite的一个版本,它是一个开源的企业级BPM平台,用于设计、执行和管理业务流程。在这个"jbpm4.3工作流程管理例子"中,我们将深入探讨jbpm4.3的核心特性和如何...
6. **界面展示**:Struts2的视图层可以与jbpm4.3的TaskForm结合,展示待办任务列表,并提供完成任务的交互界面。开发者可以通过自定义JSP页面或者使用Struts2的FreeMarker模板来实现。 在整合过程中,`jbpm4.3 ssh....
### jBPM4.3与SSH环境搭建详解 #### 一、引言 jBPM (JBoss Business Process Management) 是一个开源的工作流管理系统,它提供了用于定义业务流程的工具和APIs。本文将详细介绍如何在开发环境中安装并配置jBPM4.3...
【jbpm4.3环境搭建】涉及的知识点主要包括jbpm工作流引擎的版本管理、集成环境的构建、软件依赖配置以及数据库的连接设置。以下是详细的内容: 1. **jbpm4.3**:jbpm(Java Business Process Management)是一个...
【jbpm4.3视频教程+代码】是一个深入学习和实践Jbpm4.3的资源包,包含高质量的视频教程和相应的代码示例。Jbpm,全称Java Business Process Management,是一款开源的工作流管理系统,它允许开发者设计、部署和执行...
jbpm4.3是Jboss Business Process Management (BPM)平台的一个版本,它是一个开源的工作流管理系统,用于设计、执行和管理业务流程。本篇主要针对jbpm4.3使用过程中遇到的问题及其解决方法进行详细阐述。 首先,...
jbPM 4.3 使用JPA(Java Persistence API)作为默认的持久化机制,可以方便地与各种数据库系统(如MySQL、Oracle等)进行交互,确保流程实例和数据在重启后仍然可用。 **10. 社区支持与资源** jbPM 有一个活跃的...
6. **服务调用**:jbpm4.3支持通过服务任务调用外部系统,如Web服务、EJB等,实现了流程与企业IT系统的无缝集成。 7. **监控与报表**:jbpm4.3提供了一套监控工具,可以跟踪流程实例的执行情况,生成流程统计报告,...
根据提供的文件信息,可以归纳出以下关于JBPM 4.3中文用户手册的相关知识点: ### JBPM 4.3 概述 - **JBPM**(JBoss Business Process Management)是一个开源的工作流引擎,用于创建、管理和执行业务流程。 - **...
3. **数据库存储(Database Storage)**: jbpm4.3使用持久化机制将流程实例和相关数据存储在关系型数据库中,如MySQL或Oracle。 4. **工作流服务(WorkItem Handler)**: 处理流程中的特定任务,如邮件发送、HTTP...
**jBPM4.3用户指南** jBPM(Java Business Process Management)是一个开源的工作流管理系统,用于构建灵活的企业业务流程。本用户指南主要聚焦于jBPM在持久执行模式下的应用,即流程定义、执行状态及历史记录全部...
**jbpm4.3所需jar包** JBPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于业务流程的建模、执行和管理。在JBPM 4.3版本中,为了实现完整功能,需要一系列的jar包来支持其运行环境。...
在JBPM4.3版本中,它提供了一系列增强的功能和优化,使得开发者能够更高效地设计、执行和监控复杂的业务流程。在这个例子中,我们将深入探讨JBPM4.3的简单使用,特别是通过一个名为“leave_web”的Web应用程序来展示...