sql >> Databáze >  >> RDS >> Mysql

Sloupec BLOB/TEXT 'hodnota' použitý ve specifikaci klíče bez délky klíče

Vypadá to, že jde o tento problém (momentálně máte stejný problém), tyto dva řádky:

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

Číselné hodnoty je třeba uvést takto:

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

Zapojte to a bude to fungovat. Trik je v tom, aby se správně vložil. Kvůli stručnosti nebudu zveřejňovat celou funkci, ale v Mage_Eav_Model_Entity_Setup::createEntityTables přibližně na řádku 1341 je třeba upravit tyto řádky:

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

Takto:

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

Nejsem si úplně jistý, na co byste měli nastavit hodnotu velikosti, ale myslím si, že nastavením na plných 64k by v první řadě zmařilo účel indexování. Doufejme, že se přihlásí někdo, kdo ví o sql trochu více, než já.

Doufám, že to pomůže.



  1. Nelze předat hodnotu řetězce 1,2 jako vstup do dotazu Oracle

  2. Jaký je výchozí název omezení v PostgreSQL?

  3. výběr jedinečných hodnot ze sloupce

  4. flake8 si stěžuje na booleovské srovnání ==ve filtrační klauzuli