0

我正在创建一个表格来保存来自 rss 提要的项目,我需要创建一个“描述”列。我选择了 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
4

1 回答 1

1

即使是一段时间以来,这个错误报告似乎是您遇到的问题: 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。

查看您正在编写的查询,然后您可以确定索引应该在哪里。当您添加更多行时,索引会变得昂贵,因此您不想索引太多,但索引太少是没有用的,所以这就是为什么我建议您查看查询然后决定在哪里有索引。

于 2009-10-03T17:53:24.263 回答