簡體   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