Как добавить составной индекс в Symfony 3 с помощью Doctrine для столбца типа json_array?

У меня есть таблица, и я хочу добавить такие индексы:

 @Index(columns={"child_id", "abilities"}),
 @Index(columns={"parent_id", "abilities"}),

...

 * @ORM\Column(type="json_array", length=256)
 */
protected $abilities;

Однако даже после добавления соответствующих лимитов в миграцию:

$this->addSql('CREATE INDEX IDX_1088BF61DD62C21BB8388DA4 ON xxx (child_id, abilities(512))');
$this->addSql('CREATE INDEX IDX_1088BF61727ACA70B8388DA4 ON xxx (parent_id, abilities(512))');

Подобные ошибки возникают при запуске тестов, которые пересоздают базу данных:

Исключение произошло при выполнении '

CREATE TABLE xxx (
    id INT AUTO_INCREMENT NOT NULL, 
    parent_id INT DEFAULT NULL, 
    child_id INT DEFAULT NULL, 
    type VARCHAR(125) NOT NULL, 
    abilities LONGTEXT NOT NULL COMMENT '(DC2Type:json_array)', 
    created_at DATETIME NOT NULL, 
    modified_at DATETIME NOT NULL, 
    INDEX IDX_1088BF61727ACA70 (parent_id), 
    INDEX IDX_1088BF61DD62C21B (child_id), 
    INDEX IDX_1088BF61DD62C21B8CDE5729 (child_id, type), 
    INDEX IDX_1088BF61727ACA708CDE5729 (parent_id, type), 
    INDEX IDX_1088BF618CDE5729 (type), 
    INDEX IDX_1088BF61DD62C21BB8388DA4 (child_id, abilities), 
    INDEX IDX_1088BF61727ACA7 0B8388DA4 (parent_id, abilities), 
    INDEX IDX_1088BF61B8388DA4 (abilities), 
    UNIQUE INDEX UNIQ_1088BF61727ACA70DD62C21B (parent_id, child_id), 
    PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB

':

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1170 BLOB/TEXT «способности» столбца используются в спецификации ключа без длины ключа

Что мне нужно сделать, чтобы успешно создать индексы для этих столбцов?


person Victor S    schedule 19.04.2018    source источник


Ответы (1)


Существуют ограничения на индексацию длинных строк.

Поскольку рассматриваемая строка содержит «json», бесполезно иметь обычный индекс для этого столбца.

Решение. Избавьтесь от этих трех индексов:

INDEX IDX_1088BF61DD62C21BB8388DA4 (child_id, abilities), 
INDEX IDX_1088BF61727ACA7 0B8388DA4 (parent_id, abilities), 
INDEX IDX_1088BF61B8388DA4 (abilities), 
person Rick James    schedule 03.05.2018