创建含整型与文本列的复合唯一索引时,如何仅为文本列指定长度?
解决MySQL复合唯一索引中仅为文本列指定索引长度的问题
我懂你碰到的这个坑了!你原本的代码里用length: 15会把这个长度参数应用到复合索引里的所有列,但agency_id是整型字段,MySQL根本不允许给整型索引指定长度,这就是报错的根源。
要解决这个问题,你需要用哈希形式的length参数,明确只给ip这个文本列设置索引长度,而让整型的agency_id使用默认的索引规则。修改后的迁移代码如下:
def up create_table :whitelisted_ips do |t| t.integer :agency_id t.text :ip t.timestamps end add_index :whitelisted_ips, [:agency_id, :ip], unique: true, length: { ip: 15 } end
这样设置后,Rails只会给ip列的索引截取前15个字符,agency_id列会正常创建整型索引,复合唯一约束也能正常生效。
如果之后你需要给复合索引里的多个列分别指定不同长度,也可以用同样的方式扩展,比如:length: { column_a: 10, column_b: 20 }
内容的提问来源于stack exchange,提问作者WhoaItsAFactorial
相关产品推荐
相关产品推荐

