编辑:证明同一台计算机上的其他项目也存在相同的问题。问题是针对一个特定项目:
我有一个Symfony4项目,其中有几个实体(通过make:entity
创建)。我只是注意到,最后4个迁移中的查询完全相同(是的,我在两者之间运行迁移)。示例:
$this->addSql('ALTER TABLE event CHANGE visible_from visible_from DATETIME DEFAULT NULL, CHANGE visible_till visible_till DATETIME DEFAULT NULL, CHANGE max_signups max_signups INT DEFAULT NULL');
我手动运行了该查询,并且实际上更新了该表。然后,我创建了一个新的迁移进行测试:上面的查询再次存在。
我已经清除了缓存,运行了doctrine:cache:clear-metadata
,再次检查了奇怪的内容,但是一切正常。
我每次都有相同的3个查询,它们都有一个共同点:它们具有nullable = true。所有其他实体中都没有nullable = true。
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $maxSignups;
迁移可能是一个提示:
ALTER TABLE event CHANGE visible_from visible_from DATETIME DEFAULT \'NULL\',
This I find odd---^
MariaDB版本:10.2.14
PHP:7.2.4
symfony / orm-pack:“ ^ 1.0”
知道为什么吗?
答案 0 :(得分:0)
我仍然真的不知道为什么(所以我将这个问题保留一小段时间),但这就是我所做的:
我同时运行MySQL和MariaDB,它默认为MySQL。将其关闭,切换到MariaDB并在doctrine.yaml中添加一个版本:
doctrine:
dbal:
# configure these for your database server
driver: 'pdo_mysql'
server_version: 'mariadb-10.2.14'
虽然它并不真正在乎版本。我做了一个错字并写了12.2.14
,它的工作原理绝对不错。我猜它在某处有version>$n
条支票。
答案 1 :(得分:0)
这里介绍了所有内容: https://github.com/symfony/symfony-docs/pull/9547#issue-179389686
最重要的是将server_version设置为前缀“ mariadb”,MariaDB版本次要。
或者,您可能根本没有设置server_version,因此应该自动检测到它。
下面是负责解析server_version的DBAL驱动程序功能:
public function createDatabasePlatformForVersion($version)
{
$mariadb = false !== stripos($version, 'mariadb');
if ($mariadb && version_compare($this->getMariaDbMysqlVersionNumber($version), '10.2.7', '>=')) {
return new MariaDb1027Platform();
}
if ( ! $mariadb && version_compare($this->getOracleMysqlVersionNumber($version), '5.7.9', '>=')) {
return new MySQL57Platform();
}
return $this->getDatabasePlatform();
}