我正在尝试使用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)无效
答案 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不支持索引长度。