在Doctrine中配置索引文本长度MySQL

Ric*_*d87 4 mysql symfony doctrine-orm

我的数据库中有一个文本字段,前10个字符在其上有一个索引。如何在我的学说实体中指定?

我在任何地方都找不到有关索引的数据库特定选项的任何信息:/

这是我的“部分” MySQL创建语句:

 KEY `sourceaddr_index` (`sourceaddr`(10)),
Run Code Online (Sandbox Code Playgroud)

这是我的@Index原则:

 @ORM\Index(name="sourceaddr_index", columns={"sourceaddr"}, options={}), 
Run Code Online (Sandbox Code Playgroud)

这不会干扰常规使用,但是在将开发部署到新笔记本电脑上并基于我的实体创建数据库时,我注意到了问题。

任何帮助,将不胜感激 :)

Fox*_*ion 9

自 Doctrine 2.9 起可能,请参阅:https : //github.com/doctrine/dbal/pull/2412

@Index(name="slug", columns={"slug"}, options={"lengths": {191}})
Run Code Online (Sandbox Code Playgroud)

不幸的是,Doctrine 似乎对空格位置非常挑剔,因此例如update --dump-sql产量:

 DROP INDEX slug ON wp_terms;
 CREATE INDEX slug ON wp_terms (slug(191));
Run Code Online (Sandbox Code Playgroud)

即使您执行这些,它们的消息也会保留在那里(使用 MariaDB 10.3.14 测试)。

  • 另外,如果您想将其添加到复合索引中,也可以使用 `options={"lengths": {191, 191}}` 和 `options={"lengths": {null, 191}}` (3认同)

Mic*_*ael 5

在MySQL中手动创建索引后,我很幸运在Doctrine中命名了该索引。它不是漂亮或优雅的,并且如果您忘记重新创建索引,很容易导致从开发人员转移到生产人员的错误。但是,学说似乎理解它的尊重。

在我的实体中,我具有以下定义。主义忽略了长度选项-这是我的一厢情愿的想法。

/**
  * Field
  *
  * @ORM\Table(name="field", indexes={
  *     @ORM\Index(name="field_value_bt", columns={"value"}, options={"length": 100})
  * })
Run Code Online (Sandbox Code Playgroud)

在MySQL中,我执行

CREATE INDEX field_value_bt  ON field (value(100))
Run Code Online (Sandbox Code Playgroud)

据我所知,Doctrine仅将索引命名为同名索引。