You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建含整型与文本列的复合唯一索引时,如何仅为文本列指定长度?

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:18:08