使用DBIx :: Class时如何指定索引长度?

时间:2011-07-28 13:44:34

标签: perl dbix-class

我正在使用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,它在我“安装”时将我的long varchars转换为文本列,我真的需要索引那些varchar列。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

对不起,SQL::Translator根本不了解如何使用长度生成索引声明,这意味着DBIC deploy和DBICDH也不能这样做,因为他们通过它们完成工作SQLT。如果你想来irc.perl.org #sql-translator并讨论这个功能如何工作以及接口是什么,它可能会被添加,但目前它是不可能的。

至于你断言DBICDH“将我的long varchars转换为文本列”,这有点非常错误;这不是DBICDH的行为。请发布有关该问题的新问题,展示您正在做的事情,或将其带到irc.perl.org #dbix-class