在创建复合唯一索引时提供文本列长度



我正在尝试在新表上创建一个索引,该索引要求agency_id(整数(和IP地址(文本(具有唯一性。我知道我需要在索引上提供一个长度IP.但是我在仅将长度分配给IP列时遇到了问题。

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: 15
end

此代码返回错误

Mysql2::错误:前缀键不正确;使用的键部分不是字符串,使用的长度比键部分长,或者存储引擎不支持唯一前缀键: 在"whitelisted_ips"上创建唯一索引"index_whitelisted_ips_on_agency_id_and_ip"("agency_id"(15(,"IP"(15((

因为它试图将长度放在整数字段上。任何帮助将不胜感激。

您应该改为为length参数提供哈希:

add_index :whitelisted_ips, [:agency_id, :ip], unique: true, length: { ip: 15 }

最新更新