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 * 3是768.您需要限制键的长度或更改列的排序规则.
如何改变迁移本身:
remove_index "bookings", :name => :trip_cities
add_index "bookings", ["trip_cities"], :name => :trip_cities, :length => { :trip_cities => 255 }
Run Code Online (Sandbox Code Playgroud)
您应该使用正确的选项重新创建数据库。
这帮助我解决了同样的问题
CREATE DATABASE ${DB} DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Run Code Online (Sandbox Code Playgroud)