我有一个遗留应用程序,它正在使用Mysql 5.6数据库,数据库引擎为MyISAM。现在,我需要编写石英调度程序,它将触发多个石英作业。为此,我使用石英2.3.2。要使用石英,我需要在我的模式中创建石英表,我从Here的石英仓库的github获得了表创建脚本。
虽然我尝试使用MyISAM DB引擎创建表,但由于主键的长度超过1000个字节而失败。错误以下-
Query: CREATE TABLE QRTZ_JOB_DETAILS
(
SCHED_NAME VARCHAR(120) NOT NULL,
JOB_NAME VARCHAR(200) NOT NULL,
JOB_GROUP VARCHAR(200) NOT NULL,
DESCRIPTION VARCHAR(250) NULL,
JOB_CLASS_NAME VARCHAR(250) NOT NULL,
IS_DURABLE VARCHAR(1) NOT NULL,
IS_NONCONCURRENT VARCHAR(1) NOT NULL,
IS_UPDATE_DATA VARCHAR(1) NOT NULL,
REQUESTS_RECOVERY VARCHAR(1) NOT NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
)ENGINE=MYISAM;
Error Code: 1071
Specified key was too long; max key length is 1000 bytes
我正在使用utf8作为字符编码。
如果我在InnoDB上尝试它,它将正常工作。
问题是此旧版应用程序中的所有其他表都使用MyISAM作为数据库引擎。那么我可以仅将InnoDB用于与石英相关的表吗?因为我不确定以后是否会出现任何性能问题,因为我为不同的表使用了不同的引擎。可以帮我解决这个问题。
[MyISAM数据库引擎的以下错误被报告为MySql中的错误:
Error Code: 1071
Specified key was too long; max key length is 1000 bytes
已举报here
Mysql开发人员说这不是错误,但是它的局限性,它还有其他选择,因此优先级较低。
由于UTF-8,每个字符占用3个字节
latin1 = 1字节= 1个字符
uft8 = 3字节= 1个字符
现在,我仅将latin1作为字符编码用于石英表,因为石英回购中给出的种子脚本将无法运行。
REPAIR
表。JOB_NAMEs
(等)不是200个字符,请缩短声明。JOB_NAMEs
(等)仅使用ascii,则切换CHARACTER SET
。 (可以混合使用字符集;但是,这可能会导致JOINs
出现一些问题。SCHED_NAME
;这浪费了很多表的空间。