Mysql ::错误:指定的密钥太长; 最大密钥长度为767字节:CREATE INDEX

And*_*sky 13 ruby mysql rspec ruby-on-rails

我正在使用rails 2.3.5应用程序,女巫我有这个领域

t.string   "trip_cities",             :limit => 256
Run Code Online (Sandbox Code Playgroud)

而这个指数

add_index "bookings", ["trip_cities"], :name => "trip_cities"
Run Code Online (Sandbox Code Playgroud)

当我尝试执行时:

bundle exec rake db:test:load
Run Code Online (Sandbox Code Playgroud)

我收到此错误Mysql::Error: Specified key was too long; max key length is 767 bytes: CREATE INDEX 'trip_cities' ON 'bookings' ('trip_cities'),并不知道如何解决此问题.

G-N*_*get 13

听起来默认排序规则使用UTF8字符集.

MySQL按字节限制密钥长度,而不是字符.由于MySQL使用的UTF8实现允许每个字符3个字节,因此UTF8列上的键的最大长度是字符中密钥长度的3倍(如果没有明确指定,则密钥长度是字段的全长).

在这种情况下,最大密钥长度将256 * 3768.您需要限制键的长度或更改列的排序规则.


And*_*hyn 7

如何改变迁移本身:

remove_index "bookings", :name => :trip_cities
add_index "bookings", ["trip_cities"], :name => :trip_cities, :length => { :trip_cities => 255 }
Run Code Online (Sandbox Code Playgroud)


Kei*_*ein 5

您应该使用正确的选项重新创建数据库。

帮助我解决了同样的问题

CREATE DATABASE ${DB} DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Run Code Online (Sandbox Code Playgroud)