代码之家  ›  专栏  ›  技术社区  ›  WhoaItsAFactorial

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

  •  2
  • WhoaItsAFactorial  · 技术社区  · 6 年前

    我正在尝试在新表上创建索引,该表要求 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::错误:前缀键不正确;使用的键部分不是字符串,使用的长度比键部分长,或者存储引擎不支持唯一的前缀键:创建唯一索引'INDEX\u whitelisted\u ips\u on\u agency\u id\u和'whitelisted\u ips'('agency\u id'(15)、'ip'(15))上的唯一索引'INDEX\u whitelisted\u ips\u

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

    1 回复  |  直到 6 年前
        1
  •  4
  •   potashin    6 年前

    您应该为 length 改为参数:

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