Mysql
 sql >> Datenbank >  >> RDS >> Mysql

BLOB/TEXT-Spalte 'Wert' wird in der Schlüsselspezifikation ohne Schlüssellänge verwendet

Sieht so aus, als ob dies das Problem ist (ich habe gerade das gleiche Problem), diese beiden Zeilen:

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

Numerische Werte müssen wie folgt aufgelistet sein:

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)),

Stecken Sie das ein, und es wird funktionieren. Der Trick besteht darin, es richtig einzusetzen. Der Kürze halber poste ich nicht die ganze Funktion, sondern in Mage_Eav_Model_Entity_Setup::createEntityTables Ungefähr bei Zeile 1341 müssen Sie diese Zeilen ändern:

            ->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'))

Wie folgt:

            ->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'))

Ich bin mir nicht ganz sicher, auf was Sie den Größenwert einstellen sollten, aber ich würde denken, dass das Festlegen auf die vollen 64 KB den Zweck der Indizierung überhaupt zunichte machen würde. Hoffentlich meldet sich jemand, der etwas mehr über SQL weiß als ich.

Hoffe das hilft.