Mysql
 sql >> Base de données >  >> RDS >> Mysql

Colonne BLOB/TEXT 'valeur' ​​utilisée dans la spécification de clé sans longueur de clé

On dirait que c'est le problème (ayant le même problème en ce moment), ces deux lignes :

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

Besoin d'avoir des valeurs numériques répertoriées comme telles :

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

Branchez-le et cela fonctionnera. L'astuce consiste à l'insérer correctement. Par souci de brièveté, je ne publierai pas toute la fonction, mais dans Mage_Eav_Model_Entity_Setup::createEntityTables vers la ligne 1341, vous devez modifier ces lignes :

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

Comme suit :

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

Je ne sais pas trop à quoi vous devriez définir la valeur de taille, mais je pense que la définir sur 64k complet irait à l'encontre de l'objectif de l'indexation en premier lieu. J'espère que quelqu'un qui en sait un peu plus sur sql que moi interviendra.

J'espère que ça aide.