mysql - 无法在 MySQL 数据库中创建数据类型为 TEXT 的列

标签 mysql sql database-design data-modeling mysql-error-1170

我正在创建一个表来保存来自 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/

相关文章:

java - 使用 Hibernate 5 和 JPA 连接到 MySQL 服务器时出错

sql - 无重复的多列联合查询

sql - Redshift : count distinct customers over window partition

sql - 在 Windows 上使用 mysqldump

database - DB 中位掩码的替代设计

python - 比较 PostgreSQL 中具有 "ORDER BY"的 2 个查询的结果以检查匹配和不匹配

php - 向 Google Cloud PHPMyAdmin 服务器发送 REST 调用不起作用?

c++ - 未加载 MySql 驱动程序

mysql - InnoDB vs MyISAM 用于小表 WordPress 博客

php - 如何将一个产品插入多个类别 laravel attach()