0

我正在使用 DBIx::Class 并使用 sqlt_deploy_hook 来:

sub {
    my ($self, $sqlt_table) = @_;
    $sqlt_table->add_index(name => 'indexes', fields => [keys %for_indexing]);
}

我要索引的某些列是文本类型,或者是 varchars > 255 长度。MySQL 不喜欢文本索引,除非您指定它们的长度,如下所示:

index (long_field(996))

但是查看 SQL::Translator::Schema::Table (具有 add_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 列。

我能做些什么?

4

1 回答 1

1

很抱歉,我SQL::Translator根本不明白如何生成带长度的索引声明,这意味着 DBICdeploy和 DBICDH 也不能这样做,因为它们通过 SQLT 完成工作。如果您想访问 irc.perl.org#sql-translator并讨论此功能将如何工作以及界面将是什么,可能会添加它,但目前还不可能。

至于您断言 DBICDH 正在“将我的长 varchars 转换为文本列”,这是非常错误的;这不是 DBICDH 所期望的行为。请发布一个关于该问题的新问题,展示你在做什么,或者将它带到 irc.perl.org #dbix-class

于 2011-07-28T14:22:29.263 回答