我目前正在将我的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但它没有用。
我可以更改哪些设置?
感谢您提供任何反馈
答案 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;
这将为表创建自动递增的主键。此外,它还保留了以前用于主键的三列的唯一约束。