指定密钥太长;最大密钥长度为1000字节

时间:2014-12-05 04:32:00

标签: mysql concrete5 concrete

我目前正在将我的concrete5.7设置从localhost移动到实时服务器。我做的第一件事是导出SQL数据库并将其导入服务器,但是这给了我一个错误:

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但它没有用。

我可以更改哪些设置?

感谢您提供任何反馈

2 个答案:

答案 0 :(得分:0)

这是一个糟糕的主键选择 - 你不需要1000字节的熵来使行唯一 如果没有自然选择的主键,则可以为该行生成代理键。

e.g。取代

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

 configId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

对于使用上述内容的应用程序,这不应该是一个重大变化。

答案 1 :(得分: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;

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