sql >> Databasteknik >  >> RDS >> Mysql

BLOB/TEXT kolumnen "värde" används i nyckelspecifikation utan nyckellängd

Det verkar som att det här är problemet (har samma problem just nu), dessa två rader:

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

Behöver ha numeriska värden listade som sådana:

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

Koppla in den så fungerar det. Tricket är att få den att sätta in korrekt. För korthetens skull lägger jag inte upp hela funktionen, utan i Mage_Eav_Model_Entity_Setup::createEntityTables vid ungefär linje 1341 måste du modifiera dessa rader:

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

Så här:

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

Jag är inte helt säker på vad du ska ställa in storleksvärdet på, men jag skulle tro att om du ställer in det på hela 64k skulle det motverka syftet med indexering i första hand. Förhoppningsvis kommer någon som vet lite mer om sql än jag att höra av mig.

Hoppas det hjälper.



  1. Hur kör man ett SSIS-paket från .NET?

  2. Postgres-funktionen NULL-värde för rad som refererar till NEW

  3. MySQL-fråga för att returnera rader som innehåller blanksteg

  4. PHP MySQL utf 8-kodning