我正在使用 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 列。
我能做些什么?