Укажите длину текстового столбца при создании составного уникального индекса - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь создать индекс для новой таблицы, который требует уникальности для адреса 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 :: Ошибка: неверный префиксный ключ; используемая ключевая часть не является строкой, используемая длина больше, чем ключевая часть, или механизм хранения не поддерживает уникальные префиксные ключи: CREATE UNIQUE INDEX `index_whitelisted_ips_on_agency_id_and_ip` ON` whitelisted_ips` (`agency_id` (15), `ip` (15))

потому что он пытается поместить длину в целочисленное поле. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 11 мая 2018

Вместо параметра length вы должны указать хеш:

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