首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Acts_as_taggable_on指数太长

问Acts_as_taggable_on指数太长
EN

Stack Overflow用户
提问于 2015-03-25 09:28:00
回答 1查看 242关注 0票数 1

我正在尝试使用acts_as_taggable_gem,但我在迁移方面遇到了问题。

在自动生成的ActsAsTaggableOnMigration文件中,我得到以下错误

Mysql2 2::Error:指定键太长;最大键长度为767字节:在“taggings”('taggable_id','taggable_type','context')上创建索引'index_taggings_on_taggable_id_and_taggable_type_and_context‘

在线上add_index :taggings, [:taggable_id, :taggable_type, :context]

我过去曾成功地在另一个项目中使用了gem。唯一的区别是,这一次数据库字符集是utf8mb4,这是支持emojis的一个要求。

我已经尝试将:limit (默认为128)减少到:context上,但没有效果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-25 09:45:44

您可以通过两种方式解决这个问题:

将存储引擎(MySQL)从InnoDB更改为MyISAM、MyISAM支持1000个字节长的索引前缀,而InnoDB支持767字节。

或者通过指定context长度:

代码语言:javascript
复制
add_index :taggings, [:taggable_id, :taggable_type, :context], name: 'by_id_type_context', length: {context: 128}

 # => CREATE INDEX by_id_type_context ON taggings(taggable_id, taggable_type, context(128))

注意: SQLite不支持索引长度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29251824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档