Я использую DBIx :: Class и использую sqlt_deploy_hook для:
sub {
my ($self, $sqlt_table) = @_;
$sqlt_table->add_index(name => 'indexes', fields => [keys %for_indexing]);
}
Некоторые столбцы, которые я хочу индексировать, имеют тип text или varchars> 255 длины.MySQL не любит текстовые индексы, если вы не укажете их длину, например:
index (long_field(996))
Но посмотрите на SQL :: Translator :: Schema :: Table (который имеет метод add_index) и Index,Я не вижу способа указать длину.
add_index(name => 'indexes', fields => ['long_field'])
генерирует этот SQL:
INDEX `indexes` (`long_field`)
и это:
add_index(name => 'indexes', fields => ['long_field(996)'])
генерирует этот SQL:
INDEX `indexes` (`long_field(996)`)
, который не работает, поскольку нет столбца с таким именем.
До сих пор я справлялся с этим, просто не индексируя свои текстовые столбцы.Однако сейчас я пытаюсь использовать DBIx :: Class :: DeploymentHandler, который преобразует мои длинные varchars в текстовые столбцы при «установке», и мне действительно нужно проиндексировать эти столбцы varchar.
Что я могу сделать?