2016-03-05 106 views
1

我試圖安裝phpMyLibrary。在步驟3中,安裝程序在SQL命令中給我一個錯誤。錯誤如下:SQL:密鑰指定太長

SQL=Specified key was too long; max key length is 1000 bytes

我的代碼是:

CREATE TABLE `#__patron` (
    `uid` bigint(10) NOT NULL, 
    `gid` bigint(10) NOT NULL, 
    `barcode` bigint(10) NOT NULL, 
    `name` varchar(255) NOT NULL, 
    `firstname` varchar(255) NOT NULL, 
    `branch` varchar(255) NOT NULL, 
    `code` varchar(100) NOT NULL, 
    `type` varchar(100) NOT NULL, 
    `sup` varchar(255) NOT NULL, 
    `org` varchar(255) NOT NULL, 
    `dept` varchar(255) NOT NULL, 
    `add1` varchar(255) NOT NULL, 
    `add2` varchar(255) NOT NULL, 
    `city` varchar(255) NOT NULL, 
    `state` varchar(255) NOT NULL, 
    `zip` varchar(255) NOT NULL, 
    `country` varchar(255) NOT NULL, 
    `phone` varchar(255) NOT NULL, 
    `email` varchar(255) NOT NULL, 
    `grade` varchar(255) NOT NULL, 
    `sex` varchar(255) NOT NULL, 
    `ethnic` varchar(255) NOT NULL, 
    `birthdate` date NOT NULL, 
    `graddate` date NOT NULL, 
    `parentinfo` varchar(255) NOT NULL, 
    `comment` varchar(255) NOT NULL, 
    `custfield1` varchar(255) NOT NULL, 
    `custfield2` varchar(255) NOT NULL, 
    `custfield3` varchar(255) NOT NULL, 
    `custfield4` varchar(255) NOT NULL, 
    UNIQUE KEY `uid` (`uid`), 
    UNIQUE KEY `barcode` (`barcode`), 
    KEY `name` (`name`,`code`,`type`) 
) ENGINE=MyISAM; 

我不知道哪個鍵指定太長我幫助解決這個錯誤。

回答

1

你的錯誤是從key引用字節太多未來 - 你已經達到了與namecodetype一個關鍵的1000字節的限制:

KEY `name` (`name`,`code`,`type`) 

那項包含3個VARCHAR字段。每個varchar字段相當於其精度的3倍。這導致3*(255+100+100) = 1365 bytes

如果您將您的引擎從myisam切換到innodb它將工作。如果這不是一個選項,你需要刪除該key或減小其大小。

下面是關於在mysql中的鑰匙限制好的帖子:https://stackoverflow.com/a/3489331/1073631

+1

你釘它,只是想澄清的是,3倍長度不總是如此,它取決於字符編碼。 UTF-8是3倍長度,但latin1是1倍長度,其他變化。 –

+0

@HARTCO - 謝謝澄清,非常有用。 – sgeddes

+0

感謝此 – DevROYAL

相關問題