15

私はレール2.3.5アプリケーションで作業しています.魔女にはこのフィールドがあります

t.string   "trip_cities",             :limit => 256

そしてこの指数

add_index "bookings", ["trip_cities"], :name => "trip_cities"

実行しようとすると:

bundle exec rake db:test:load

このエラーが発生Mysql::Error: Specified key was too long; max key length is 767 bytes: CREATE INDEX 'trip_cities' ON 'bookings' ('trip_cities')しましたが、これを解決する方法がよくわかりません。

4

5 に答える 5

14

デフォルトの照合では UTF8 文字セットが使用されているようです。

MySQL はキーの長さを文字数ではなくバイト数で制限しています。MySQL が使用する UTF8 実装では 1 文字あたり 3 バイトが許可されているため、UTF8 列のキーの最大長はキーの長さ (文字単位) の 3 倍です (明示的に指定されていない場合、キーの長さはフィールドの全長です)。

この場合、キーの最大長は になり256 * 3ます768。キーの長さを制限するか、列の照合を変更する必要があります。

于 2013-11-12T22:04:10.303 に答える
9

移行自体を変更するのはどうですか:

remove_index "bookings", :name => :trip_cities
add_index "bookings", ["trip_cities"], :name => :trip_cities, :length => { :trip_cities => 255 }
于 2013-11-12T21:58:32.093 に答える