我正在尝试在新表上创建一个索引,该索引要求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 }