我有一个迁移,它使用add_index以下内容为现有表添加索引:
add_index :foo, [:foo_type, :bar_id, :baz_id], :unique => true
Run Code Online (Sandbox Code Playgroud)
但是,我的字段足够长,超过了最大的InnoDB密钥长度.根据Anders Arpteg对如何增加MySQL 5.1密钥长度的回答?,我需要像这样生成SQL:
CREATE UNIQUE INDEX `index_matches_on_foo_and_bar_id_and_baz_id` ON `matches` (`foo`(100), `bar_id`(100), `baz_id`(100))
Run Code Online (Sandbox Code Playgroud)
我可以用漂亮的Rails-y方式做到这一点,还是我必须坚持在迁移中使用原始SQL?
您可以为您使用的每个字段指定手动长度,以保持在总限制之下:
add_index(:foo, [:foo_type, :bar_id, :baz_id], :unique => true, :length => {:foo_type => 100, :bar_id => 20, :baz_id => 20})
Run Code Online (Sandbox Code Playgroud)
您可以指定长度参数,这将生成您要求的确切SQL:
add_index :foo, [:foo_type, :bar_id, :baz_id], :unique => true, :length => 100
Run Code Online (Sandbox Code Playgroud)
两个缺点:
| 归档时间: |
|
| 查看次数: |
2784 次 |
| 最近记录: |