sql >> データベース >  >> RDS >> Mysql

キーの長さのないキー指定で使用されるBLOB/TEXT列の「値」

    これが問題のようです(現在同じ問題があります)、次の2行:

    INDEX `IDX_ALPHANUM_INFO_TEXT_ATTRIBUTE_ID_VALUE` (`attribute_id`, `value`),
    INDEX `IDX_ALPHANUM_INFO_TEXT_ENTITY_TYPE_ID_VALUE` (`entity_type_id`, `value`),
    

    数値をそのようにリストする必要があります:

    INDEX `IDX_ALPHANUM_INFO_TEXT_ATTRIBUTE_ID_VALUE` (`attribute_id`, `value`(255)),
    INDEX `IDX_ALPHANUM_INFO_TEXT_ENTITY_TYPE_ID_VALUE` (`entity_type_id`, `value`(255)),
    

    それを差し込むと、動作します。トリックはそれを正しく挿入させることです。簡潔にするために、関数全体を投稿するのではなく、Mage_Eav_Model_Entity_Setup::createEntityTablesに投稿します。 約1341行目で、次の行を変更する必要があります。

                ->addIndex($this->getIdxName($eavTableName, array('attribute_id', 'value')),
                    array('attribute_id', 'value'))
                ->addIndex($this->getIdxName($eavTableName, array('entity_type_id', 'value')),
                    array('entity_type_id', 'value'))
    

    次のように:

                ->addIndex($this->getIdxName($eavTableName, array('attribute_id', 'value')),
                    array('attribute_id', $type == 'text' ? array('name' => 'value', 'size' => 255) : 'value'))
                ->addIndex($this->getIdxName($eavTableName, array('entity_type_id', 'value')),
                    array('entity_type_id', $type == 'text' ? array('name' => 'value', 'size' => 255) : 'value'))
    

    サイズの値を何に設定すればよいかはよくわかりませんが、64kに設定すると、そもそもインデックス作成の目的が果たせなくなると思います。うまくいけば、私がチャイムを鳴らすよりもSQLについてもう少し知っている人がいます。

    お役に立てば幸いです。



    1. 無効な構文エラータイプ=Hibernateによって生成されたDDLのMyISAM

    2. 複数の行を挿入するときにONDUPLICATEKEY UPDATEを使用してMySqlのフィールドをインクリメントするにはどうすればよいですか?

    3. キーワードによるOracleパーティション

    4. WHERE col IN(...)条件の制限