Acts_as_taggable_on索引太长了

时间:2015-03-25 09:28:01

标签: ruby-on-rails database rails-migrations acts-as-taggable-on

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

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

  

Mysql2 ::错误:指定的密钥太长;最大密钥长度为767   bytes:CREATE INDEX   ' index_taggings_on_taggable_id_and_taggable_type_and_context'上   '的Tagging' (' taggable_id',' taggable_type',' context')

add_index :taggings, [:taggable_id, :taggable_type, :context]

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

我尝试在:limit上减少:context(默认为128)无效

1 个答案:

答案 0 :(得分:1)

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

将存储引擎(MySQL)从InnoDB更改为MyISAM,MyISAM supports 1000 bytes long prefix for indexing, whereas InnoDB support 767 bytes.

或者指定context长度:

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不支持索引长度。