Acts_as_taggable_on 索引太长

Acts_as_taggable_on index too long

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

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

Mysql2::Error: Specified key was too long; max key length is 767 bytes: CREATE INDEX 'index_taggings_on_taggable_id_and_taggable_type_and_context' ON 'taggings' ('taggable_id', 'taggable_type', 'context')

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

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

我尝试减少 :context 上的 :limit(默认为 128)无济于事

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

将您的存储引擎 (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不支持索引长度。