我正在使用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列。
我该怎么办?
答案 0 :(得分:1)
对不起,SQL::Translator
根本不了解如何使用长度生成索引声明,这意味着DBIC deploy
和DBICDH也不能这样做,因为他们通过它们完成工作SQLT。如果你想来irc.perl.org #sql-translator
并讨论这个功能如何工作以及接口是什么,它可能会被添加,但目前它是不可能的。
至于你断言DBICDH“将我的long varchars转换为文本列”,这有点非常错误;这不是DBICDH的行为。请发布有关该问题的新问题,展示您正在做的事情,或将其带到irc.perl.org #dbix-class
。