学说迁移:diff 重新生成相同的唯一索引约束

9 php doctrine symfony doctrine-orm doctrine-migrations

我有一个奇怪的问题。当我运行时doctrine-migrations migrations:diff,它会重新生成在早期迁移中已设置的索引。

早期迁移(uniq 索引也存在于我的数据库中):

$this->addSql('CREATE TABLE my_table (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_4VBV083VA6917B55 (email), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE `utf8_unicode_ci` ENGINE = InnoDB');
Run Code Online (Sandbox Code Playgroud)

运行后重新生成doctrine-migrations migrations:diff

$this->addSql('DROP INDEX uniq_4vbv083va6917b55 ON my_table');
$this->addSql('CREATE UNIQUE INDEX UNIQ_J43107ECE6416I64 ON contact_company (email)');
Run Code Online (Sandbox Code Playgroud)

注意小写到大写。也许这意味着什么。在我之前的迁移中,我将它设置为大写,并且它在我的数据库中也显示为大写,所以我不知道为什么它在这里是小写。

我在我的实体中定义了这样的唯一约束:

/**
 * @ORM\Column(type="string", unique=true)
 */
private string $email;
Run Code Online (Sandbox Code Playgroud)

小智 0

我也遇到了这个问题。我通过将电子邮件列长度更改为 191 个字符来修复此问题,这是 MySQL (utf8mb4) 索引允许的最大长度。

索引大小:MySQL varchar 索引长度

/**
 * @ORM\Column(type="string", length=191, unique=true)
 */
private string $email;
Run Code Online (Sandbox Code Playgroud)

我的字段有一个复合索引,并在检查数据库中的索引时注意到它读取“email(191),xxxx_id,xxxx_id”。我不确定原则是如何做事的,但我认为它在这里看到 191 != 255 并尝试一遍又一遍地删除并重新创建索引。

我正在使用这些软件包版本:
doctrine/orm -> 2.12.1doctrine
/migrations -> 3.5.0