Ruby On Rails - Rake模式 - 最大密钥长度为767字节

时间:2012-06-07 11:56:54

标签: mysql ruby-on-rails schema innodb max

我试图挖掘db:schema:load但是我收到了错误

Mysql2::Error: Specified key was too long; max key length is 767 bytes: CREATE UNIQUE INDEX 

根据我的理解,InnoDB只允许其索引中最多767个字节......如果你使用的是utf-8,它应该除以3。

但是当我尝试在schema.rb中设置最多100个字符(甚至不接近767)时,错误仍然会发生......

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: Specified key was too long; max key length is 767 bytes: CREATE UNIQUE INDEX `index_friendly_id_slugs_on_slug_and_sluggable_type` ON `friendly_id_slugs` (`slug`, `sluggable_type`)

的MySQL

Your MySQL connection id is 1838
Server version: 5.5.22-0ubuntu1-log (Ubuntu)

我错过了什么?

2 个答案:

答案 0 :(得分:4)

我在你的代码中看到两个问题:

  • limit参数应调用length
  • 在多列索引上,length参数应该是指定两列的长度的哈希::length => { :slug => 200, :sluggable_type => 30 }

查看文档:{​​{3}}。

答案 1 :(得分:0)

如果您使用的是mysql 6,则一个utf char可以是4(!)字节。

但更重要的是,我认为add_index不支持:limit。但它确实支持:length 对于逐列字符长度限制。