作者:双子座-海_358 | 来源:互联网 | 2024-12-20 13:14
当尝试通过Ruby on Rails执行数据库模式加载(db:schema:load)时,遇到了一个错误:
Mysql2::Error: 指定的键太长;最大键长度为767字节: CREATE UNIQUE INDEX
根据MySQL的文档,InnoDB存储引擎中的索引键长度限制为767字节。如果使用的是UTF-8字符集,由于每个字符占用3个字节,因此实际可用的字符数会少于255个。
即使在schema.rb文件中设置了较短的字符长度限制,例如100个字符,依然出现了上述错误。以下是schema.rb的相关部分:
add_index "friendly_id_slugs", ["slug", "sluggable_type"], :name => "index_friendly_id_slugs_on_slug_and_sluggable_type", :unique => true, :length => { :name => 100, :slug => 100, :sluggable_type => 40 }
错误信息如下:
-- add_index("friendly_id_slugs", ["slug", "sluggable_type"], {:name=>"index_friendly_id_slugs_on_slug_and_sluggable_type", :unique=>true, :length=>{:name=>100, :slug=>100, :sluggable_type=>40}})
rake aborted!
Mysql2::Error: 指定的键太长;最大键长度为767字节: CREATE UNIQUE INDEX `index_friendly_id_slugs_on_slug_and_sluggable_type` ON `friendly_id_slugs` (`slug`, `sluggable_type`)
当前使用的MySQL版本为5.5.22-0ubuntu1-log (Ubuntu)。
问题可能在于索引长度的设置方式。正确的做法是在多列索引中,使用一个哈希来指定每列的长度限制,例如::length => { :slug => 200, :sluggable_type => 30 }
。此外,确保使用的关键字是:length
而不是其他名称。
更多关于创建特定键长度索引的信息,可以参考官方文档:Creating an index with specific key length。