Ada*_*dam 3 mysql ruby-on-rails
在rails中创建迁移并指定字符串时,列长度默认为255.有没有办法设置所有创建的未指定长度的列,默认为其他数字?
一般来说255很好,但在我的情况下,我需要将字符串列上的编码切换到utf8mb4,当我这样做时索引中断,因为索引不能超过767字节:
Mysql2::Error: Specified key was too long; max key length is 767 bytes
由于utf8存储为3个字节3 * 255 = 765,但utf8mb4是4个字节4 * 255 = 1020,因此将失败.
因此,一旦我更改了database.yml使用utf8mb4编码,当我重新加载模式时,当他们尝试加载索引时,事情会失败.
可以强制Rails对varchar列使用191的长度.首先,创建一个初始化程序,您将覆盖默认的varchar长度.我创建了我的config/initializers/schema_string_limit.rb:
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::NATIVE_DATABASE_TYPES[:string] = {
name: 'varchar',
limit: 191
}
Run Code Online (Sandbox Code Playgroud)
现在重新创建数据库并运行所有迁移:
rake db:drop
rake db:create
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
确保你使用rake db:migrate而不是rake db:schema:load.我们需要强制Rails再次运行所有迁移,因为现有schema.rb已经反映了255的大小.一旦您使用新的默认值运行迁移,您将拥有一个schema.rb使用长度为191 的新的,因此您将能够从那时起简单地加载模式.
| 归档时间: |
|
| 查看次数: |
1629 次 |
| 最近记录: |