sql >> Database teknologi >  >> RDS >> Mysql

BLOB/TEXT kolonne 'værdi' brugt i nøglespecifikation uden nøglelængde

Det ser ud til, at dette er problemet (har det samme problem lige nu), disse to linjer:

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

Skal have numeriske værdier anført som sådan:

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

Sæt det i, og det vil virke. Tricket er at få det til at indsætte korrekt. For korthedens skyld vil jeg ikke poste hele funktionen, men i Mage_Eav_Model_Entity_Setup::createEntityTables ved omkring linje 1341, skal du ændre disse linjer:

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

Som følger:

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

Jeg er ikke helt sikker på, hvad du skal indstille størrelsesværdien til, men jeg vil tro, at hvis du indstiller den til hele 64k, ville det i første omgang besejre formålet med indeksering. Forhåbentlig vil nogen, der ved lidt mere om sql, end jeg kime ind.

Håber det hjælper.



  1. MySQL skrivning på en tekstfil

  2. Indsamlingsmetode:UDVID Procedure i Oracle-databasen

  3. Hvordan kan jeg registrere, om den tilsluttede database er MariaDB eller MySQL?

  4. Sådan finder og maskerer du PII i Elasticsearch