将Mysql和MyISAM一起使用Mysql作为带有石英调度程序的数据库引擎

问题描述 投票:0回答:2

我有一个遗留应用程序,它正在使用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用于与石英相关的表吗?因为我不确定以后是否会出现任何性能问题,因为我为不同的表使用了不同的引擎。可以帮我解决这个问题。

mysql quartz-scheduler myisam
2个回答
0
投票

[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作为字符编码用于石英表,因为石英回购中给出的种子脚本将无法运行。


0
投票
  • 完整的UTF-8需要utf8mb4,每个字符最多占用4个字节。
  • 切换到InnoDB;性能会更好。也许即使您混合使用表(某些MyISAM,某些InnoDB)
  • 切换到InnoDB;停电后,您将不必REPAIR表。
  • 在删除MyISAM之前切换到InnoDB。
  • 如果您的JOB_NAMEs(等)不是200个字符,请缩短声明。
  • 如果您的JOB_NAMEs(等)仅使用ascii,则切换CHARACTER SET。 (可以混合使用字符集;但是,这可能会导致JOINs出现一些问题。
  • 规范化SCHED_NAME;这浪费了很多表的空间。
© www.soinside.com 2019 - 2024. All rights reserved.