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