在创建复合唯一索引时提供文本列长度
Provide text column length on composite unique index creation
我正在尝试在新的 table 上创建索引,该索引需要 agency_id
(整数)和 IP
地址(文本)的唯一性。我知道我需要为 IP
提供索引长度。但是我在将长度分配给 just 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
这段代码returns错误
Mysql2::Error: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys: CREATE UNIQUE INDEX `index_whitelisted_ips_on_agency_id_and_ip` ON `whitelisted_ips` (`agency_id`(15), `ip`(15))
因为它试图将长度放在整数字段上。任何帮助将不胜感激。
您应该为 length
参数提供哈希:
add_index :whitelisted_ips, [:agency_id, :ip], unique: true, length: { ip: 15 }
我正在尝试在新的 table 上创建索引,该索引需要 agency_id
(整数)和 IP
地址(文本)的唯一性。我知道我需要为 IP
提供索引长度。但是我在将长度分配给 just 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
这段代码returns错误
Mysql2::Error: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys: CREATE UNIQUE INDEX `index_whitelisted_ips_on_agency_id_and_ip` ON `whitelisted_ips` (`agency_id`(15), `ip`(15))
因为它试图将长度放在整数字段上。任何帮助将不胜感激。
您应该为 length
参数提供哈希:
add_index :whitelisted_ips, [:agency_id, :ip], unique: true, length: { ip: 15 }