我正在尝试使用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上,但没有效果。
发布于 2015-03-25 09:45:44
您可以通过两种方式解决这个问题:
将存储引擎(MySQL)从InnoDB更改为MyISAM、MyISAM支持1000个字节长的索引前缀,而InnoDB支持767字节。
或者通过指定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不支持索引长度。
https://stackoverflow.com/questions/29251824
复制相似问题