私はDBIx ::クラスを使用していますし、sqlt_deploy_hookを使用していた:DBIx :: Classを使用する際に、どのようにインデックスの長さを指定しますか?
sub {
my ($self, $sqlt_table) = @_;
$sqlt_table->add_index(name => 'indexes', fields => [keys %for_indexing]);
}
私はインデックスを作成する列の一部は、text型である、または> 255の長さのvarcharです。あなたはこのように、長さでそれらを指定しない限り MySQLはテキストインデックスを好きではない:
index (long_field(996))
しかし、SQLを見て::翻訳::スキーマ::表(ADD_INDEX方法を持っている)とインデックス、I長さを指定する方法はありません。
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列が本当に必要です。
どうすればよいですか?
問題は、DBICDHが使用するSQL :: Translatorが、より正確なSQLを生成するためにmysqlバージョンを知る必要があることです。 DeploymentHandlerのコンストラクタには次のものが含まれます: "sql_translator_args => {mysql_version => '5.0.3'}" –