全文键太长

发布于 2024-09-13 02:39:43 字数 353 浏览 4 评论 0原文

尝试将全文索引添加到 MySQL 数据库中的标题、版本和作者时,出现以下错误:

指定的密钥太长;最大密钥长度为 1000 字节

以下是各列:

`Title` varchar(255) NOT NULL,
`Edition` varchar(20) default NULL,
`Authors` varchar(255) default NULL,

它们都不是唯一的.. 即使所有 3 个的组合也不是唯一的。数据库的主键是 ISBN。

我添加此全文索引的原因是这样人们可以使用可能包括标题、版本或作者的关键字搜索书籍。

I get the following error when trying to add a FULLTEXT index to Title, Edition and Author in my MySQL database:

Specified key was too long; max key length is 1000 bytes

Here are the columns:

`Title` varchar(255) NOT NULL,
`Edition` varchar(20) default NULL,
`Authors` varchar(255) default NULL,

None of them are unique.. Even the combination of all 3 is not unique. Primary key on the database is the ISBN.

The reason I'm adding this FULLTEXT index is so people can search for books using a keyword that might include the Title, the Edition, or the Author.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

三寸金莲 2024-09-20 02:39:43

MySQL 对为索引分配多少空间有限制 - 它是MyISAM 为 1000 字节,InnoDB 为 767

解决该限制的唯一方法是定义对列的一部分进行索引的键 - 这意味着这就是索引中的全部内容,限制了它的值:

CREATE INDEX index_name ON YOUR_TABLE(title(100), edition, authors(100));

这将对标题列的前 100 个字符以及所有版本列进行索引,以及作者栏的 100 个字符。我认为 VARCHAR 列的比例为 3 比 1,因此 VARCHAR(250) 需要 750 字节。

MySQL has a limit on how much space is allocated for indexes - it's 1000 bytes for MyISAM, 767 for InnoDB.

The only way around the limitation is to define keys that index a portion of the column - which means that's all that will be in the index, limiting it's value:

CREATE INDEX index_name ON YOUR_TABLE(title(100), edition, authors(100));

That will index the first 100 characters of the title column, all of the edition column, and 100 characters of the authors column. I believe is a 3 to 1 ratio for VARCHAR columns, so VARCHAR(250) takes 750 bytes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文