【问题标题】:How do I add compound index in Symfony 3 using Doctrine on column of type "json_array"?如何在“json_array”类型的列上使用 Doctrine 在 Symfony 3 中添加复合索引?
【发布时间】:2018-09-30 06:48:54
【问题描述】:

我有一个表,我想添加这样的索引:

 @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 没有密钥长度的密钥规范中使用的列“能力”

要在这些列上成功创建索引,我需要做什么?

【问题讨论】:

    标签: mysql symfony indexing doctrine php-7.1


    【解决方案1】:

    索引长字符串存在限制。

    由于有问题的字符串包含“json”,因此在该列上具有常规索引是没有用的。

    解决方法:去掉这3个索引:

    INDEX IDX_1088BF61DD62C21BB8388DA4 (child_id, abilities), 
    INDEX IDX_1088BF61727ACA7 0B8388DA4 (parent_id, abilities), 
    INDEX IDX_1088BF61B8388DA4 (abilities), 
    

    【讨论】:

      猜你喜欢
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 2016-01-24
      • 2011-08-11
      • 2019-12-22
      相关资源
      最近更新 更多