2012-06-07 101 views
3

我試着去耙分貝:模式:負載,但我得到的錯誤Ruby on Rails的 - 佣金模式 - 最大密鑰長度爲767個字節

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

從我的理解是,InnoDB的只允許767 A最大字節在他們的索引中......如果你使用utf-8,它應該被除以3.

但是當我嘗試在模式中設置最多100個字符(它甚至不接近767)。 rb錯誤仍然發生...

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) 

我缺少什麼?

回答

4

我看到你的代碼的兩個問題:

  • limit參數應該叫length
  • 在多列索引的length參數應該是一個散列指定爲兩列長度::length => { :slug => 200, :sluggable_type => 30 }

查閱文檔:http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_index-label-Creating+an+index+with+specific+key+length

+0

感謝您的回覆,但這並沒有幫助,請使用新字符串查看我的更新問題。謝謝! – Philip

+0

我想我找到了,堅持! – Philip

+0

我添加了:名稱和設置 t.string「slug」,:null => false,:limit => 100 在創建該表爲100,它的工作,但現在我卡住了另一個錯誤... 謝謝您的幫助! – Philip

0

如果你使用mysql 6,一個utf char可以是4(!)個字節。

但更重要的是,我不認爲add_index支持:limit。但是,它支持:length 列逐字符長度限制。

+0

感謝您的回覆,但我的MySQL版本是5.5.x,並且我添加了長度參數,但沒有幫助。 – Philip

相關問題