7
回答
【求助】mysql:Specified key was too long; max key leng
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

目前我创建一个表到时候遇到 Specified key was too long; max key length is 1000 bytes 问题!求帮助

mysql版本如下:

    mysql  Ver 14.14 Distrib 5.1.41, for debian-linux-gnu (i486) using readline 6.1

操作系统为:Ubuntu10.04 server

我创建数据库的语句如下:

    CREATE DATABASE dotcms CHARACTER SET utf8;

创建表的语句如下:

create table calendar_reminder (
   user_id varchar(255) not null,
   event_id varchar(100) not null,
   send_date datetime not null,
   primary key (user_id, event_id, send_date)
);

create table identifier (
   inode varchar(100) not null,
   uri varchar(255),
   host_inode varchar(255),
   primary key (inode),
   unique (uri, host_inode)
);

两个都是同样的错误:[CREATE - 0 row(s), 0.000 secs]  [Error Code: 1071, SQL State: 42000]  Specified key was too long; max key length is 1000 bytes

谁知道是什么原因?如何解决?

谢谢了!~

举报
张桢
发帖于7年前 7回/13K+阅
共有7个答案 最后回答: 5年前

引用来自#3楼“Jimmy”的帖子

 

索引字段内容太大了~~

 索引?我没创建索引呢啊?

而且表最大的字段长度才为255

 

能仔细说明下么?谢谢了。。

自己回复

问题解决了,但是不知道原因!~

解决方法:将mysql的engine更改为InnoDB就可以了。

ps:我原来的默认engine为myisam

MySQL MyIsAm 存储引擎在创建索引的时候,索引键长度是有一个较为严格的长度限制的,所有索引键最大长度总和不能超过1000,而且不是实际数据长度的总和,而是索引键字段定义长度的总和。

引用来自#6楼“凹凸曼”的帖子

MySQL MyIsAm 存储引擎在创建索引的时候,索引键长度是有一个较为严格的长度限制的,所有索引键最大长度总和不能超过1000,而且不是实际数据长度的总和,而是索引键字段定义长度的总和。

 谢谢!~我还有点疑问

 create table identifier (
   inode varchar(100) not null,
   uri varchar(255),
   host_inode varchar(255),
   primary key (inode),
   unique (uri, host_inode)
);

上面的sql的 索引键的长度总和=100+255?应该等于多少?

刚解决完类似的问题,整理一下思路.

1.DB engine 是MyIsAm
2.字符集是 utf8 ,1个utf8=3bytes
3.最后就是 (100+255)*3>1000 所以报错

解决方案很多 ,修改DB engine 至 innodb,或者是更改字符集,或者是减小字段长度 皆可.
:)
顶部