我使用DBIx ::類和現在用的sqlt_deploy_hook到:如何在使用DBIx :: Class時指定索引長度?
sub {
my ($self, $sqlt_table) = @_;
$sqlt_table->add_index(name => 'indexes', fields => [keys %for_indexing]);
}
一些我想要索引列的類型的文本,或者是VARCHAR處理> 255的長度。 MySQL不喜歡的文本索引,除非你有一個長度指定它們,就像這樣:
index (long_field(996))
但看SQL ::譯者::模式::表(具有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,當我「安裝」時,它將我的長變體轉換爲文本列,而且我真的需要那些索引的varchar列。
我該怎麼辦?
問題是SQL :: Translator,DBICDH使用,需要知道一個MySQL版本以生成更準確的SQL(IE不會破壞你的列類型這麼多)。在您的DeploymentHandler的構造函數中包含:「sql_translator_args => {mysql_version =>'5.0.3'}」 –