2014-12-05 129 views
0

我目前正在将我的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,但它不起作用。

我可以更改哪些设置?

谢谢你的任何反馈

回答

0

也就是说主键的一个糟糕的选择 - 你不需要1000个字节熵,使一排独特 如果有主键的不自然的选择,您可以生成该行的代理键。

例如替换

PRIMARY KEY ( `configNamespace` , `configGroup` , `configItem`) , 

configId INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 

这不应该是针对使用上述的应用程序的重大更改。

0

我建议以下结构:

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; 

这将创建表的自动递增的主键。另外,它保留了以前用于主键的三列的唯一约束。

相关问题