指定的密钥太长;最大密钥长度为1000字节
问题描述:
我目前正在将我的concrete5.7安装程序从localhost移至活动服务器。我所做的第一件事就是导出的SQL数据库,并导入在服务器上,但是这是给我的错误:指定的密钥太长;最大密钥长度为1000字节
Error
SQL query:
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `config`
--
CREATE TABLE IF NOT EXISTS `config` (
`configNamespace` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`configGroup` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL ,
`configItem` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL ,
`configValue` LONGTEXT COLLATE utf8_unicode_ci,
PRIMARY KEY ( `configNamespace` , `configGroup` , `configItem`) ,
KEY `configGroup` ( `configGroup`)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;
MySQL said:
#1071 - Specified key was too long; max key length is 1000 bytes
我知道,关键是太长,但没有任何*的改变?我试着将数据库整理更改为latin1,但它不起作用。
我可以更改哪些设置?
谢谢你的任何反馈
答
也就是说主键的一个糟糕的选择 - 你不需要1000个字节熵,使一排独特 如果有主键的不自然的选择,您可以生成该行的代理键。
例如替换
PRIMARY KEY ( `configNamespace` , `configGroup` , `configItem`) ,
与
configId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
这不应该是针对使用上述的应用程序的重大更改。
答
我建议以下结构:
CREATE TABLE IF NOT EXISTS `config` (
configId int not null auto_increment primary key,
configNamespace VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
configGroup VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL ,
configItem VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL ,
configValue LONGTEXT COLLATE utf8_unicode_ci,
UNIQUE (configNamespace, configGroup, configItem) ,
KEY `configGroup` ( `configGroup`)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;
这将创建表的自动递增的主键。另外,它保留了以前用于主键的三列的唯一约束。