2014-12-05 125 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; 

這將創建表的自動遞增的主鍵。另外,它保留了以前用於主鍵的三列的唯一約束。

相關問題