sql >> Base de Datos >  >> RDS >> Mysql

Columna BLOB/TEXT 'valor' utilizada en la especificación de clave sin una longitud de clave

Parece que este es el problema (que tiene el mismo problema en este momento), estas dos líneas:

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

Necesita tener valores numéricos listados como tales:

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

Conéctalo y funcionará. El truco es conseguir que se inserte correctamente. En aras de la brevedad, no publicaré la función completa, sino en Mage_Eav_Model_Entity_Setup::createEntityTables aproximadamente en la línea 1341, debe modificar estas líneas:

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

De la siguiente manera:

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

No estoy muy seguro de en qué debe establecer el valor de tamaño, pero creo que establecerlo en 64k completo anularía el propósito de la indexación en primer lugar. Con suerte, alguien que sabe un poco más sobre sql que yo intervendrá.

Espero que ayude.