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
| 归档时间: |
|
| 查看次数: |
1540 次 |
| 最近记录: |