3

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)

私は何が欠けていますか?

4

2 に答える 2

4

あなたのコードには 2 つの問題があります。

  • 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

于 2012-06-07T12:10:08.513 に答える
-1

mysql 6 を使用している場合、1 つの utf char は 4 (!) バイトになります。

add_indexしかし、もっと重要なことは、サポートしているとは思わないこと:limitです。ただし:length 、列単位の文字長制限はサポートされています。

于 2012-06-07T12:22:21.623 に答える