我正在创建一个表格来保存rss feed中的项目,并且需要创建一列“说明”。我将数据类型选择为TEXT,在此列上没有设置任何限制,没有索引。这是我得到的错误:
#1071 - Specified key was too long; max key length is 1000 bytes
如果选择索引此列,则会收到以下错误消息:
#1170 - BLOB/TEXT column 'description' used in key specification without a key length
我为此列指定的任何长度都会返回我得到的第一个错误。有人可以告诉我我在做什么错吗?谢谢!
更新:
我正在使用MySQL 5.0.4
这是我用来创建表的查询:
CREATE TABLE `feed_items` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`feed_id` INT NOT NULL COMMENT '`feeds`.`id`',
`guid` VARCHAR( 255 ) NOT NULL ,
`publish_date` DATETIME NOT NULL ,
`update_of` INT NULL COMMENT '`feed_items`.`id`',
`link` VARCHAR( 255 ) NOT NULL ,
`title` VARCHAR( 255 ) NOT NULL ,
`description` TEXT NOT NULL ,
`comments_link` VARCHAR( 255 ) NULL ,
INDEX ( `feed_id` , `guid` , `publish_date` , `update_of` , `title` )
) ENGINE = MYISAM
最佳答案
即使是一段时间,此错误报告似乎仍然是您遇到的问题:
http://bugs.mysql.com/bug.php?id=4541
您可能需要通读有关此错误的注释,并查看它们是否与您的情况有关,因为如果不查看用于获取此错误的命令或不知道哪个版本的mysql很难提供帮助。
更新:根据您的查询,您可能要先删除此:
INDEX ( `feed_id` , `guid` , `publish_date` , `update_of` , `title` )
然后,尝试执行以下操作:
INDEX ( `feed_id`)
当我看到这样的长索引时,我会感到怀疑。
理想情况下,您应该索引将要进行选择的内容,因此除非您有
SELECT * FROM table WHERE feed_id=? AND guid=? AND publish_date=? AND update_of=? and title=?
那么这个索引是没有用的。由于feed_id是主键,您应该这样做
SELECT * FROM table where feed_id=?
因为它将唯一地返回一行。
因此,我上面需要的索引将是需要的。您可能还需要标题和publish_date的单独索引。
查看正在编写的查询,然后可以确定索引应该在哪里。随着添加更多行,索引将变得昂贵,因此您不想索引太多,但是索引太少是没有用的,因此这就是为什么我建议您查看查询然后决定在哪里拥有索引的原因。