我正在创建一个表来保存来自 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=?
因为它将唯一地返回一行。
所以我上面的索引就是所需要的。您可能还需要标题和发布日期的单独索引。
看看您正在编写什么查询,然后您就可以确定索引应该在哪里。当您添加更多行时,索引会变得昂贵,因此您不想索引太多,但索引太少是没有用的,所以这就是为什么我建议您查看查询,然后决定在哪里建立索引。
关于mysql - 无法在 MySQL 数据库中创建数据类型为 TEXT 的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1514411/