繁体   English   中英

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

[英]How do you specify index length when using 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,它在我“安装”时将我的长varchars转换为文本列,而我确实需要索引这些varchar列。

我能做什么?

抱歉, SQL::Translator根本不了解如何生成具有长度的索引声明,这意味着DBIC deploy和DBICDH也无法做到这一点,因为它们是通过SQLT进行工作的。 如果您想通过irc.perl.org #sql-translator讨论此功能的工作原理以及接口是什么,可能会添加它,但目前尚无法实现。

关于您的断言DBICDH是“将我的长varchars转换为文本列”,这有一个很大的错误; 对于DBICDH而言,这不是您期望的行为。 请发布有关该问题的新问题,以显示您在做什么,或将其带到irc.perl.org #dbix-class

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM