数据库:Mysql,使用的该表引擎:MYISAM引擎. 由于需要对该表进行频繁地读取和写入比较,造成数据表损坏,现在想把该表转换成INNODB引擎,不过在转换的过程中出错,出现以下提示:
Can't convert link_pix_200707: Error Specified key was too long; max key length is 767 bytes。
该表目前结构: -- 该表的结构 `link_xp` CREATE TABLE `link_xp` ( `photo_id` bigint(20) NOT NULL, `owner_id` bigint(20) NOT NULL DEFAULT '0', `domain` varchar(255) NOT NULL, `referer_url` text NOT NULL,
PRIMARY KEY (`photo_id`,`referer_url`(300)), KEY `owner_id` (`owner_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 通过测试大概是由于联合索引的字段长度过长引起的,如果我们主索引删除就可以成功转换,但是转换INNODB成功后,又不能添加该索引?
解决方案: 这个不是mysql版本的造成问题,而是由于表link_xp的“referer_url”字段内容的长度大于767 bytes,数据库编码是UTF8,一个UTF8等于3个字节。 把“referer_url” 字段内容长度大于767 bytes的截断就ok了。 |