可空列的数据库架构不同步

时间:2018-08-15 07:44:19

标签: symfony doctrine-orm mariadb

仅发现doctrine:schema:validate会引发错误:

  

[错误]数据库模式与当前映射文件不同步。

所以我尝试doctrine:schema:update --force --complete --dump-sql成功:

  

将执行以下SQL语句:

 ALTER TABLE user CHANGE last_login `last_login` DATETIME DEFAULT NULL;
     

正在更新数据库架构...

 1 query was executed
     

[确定]数据库架构已成功更新!

但是,如果我再次运行doctrine:schema:validate,则会出现与模式不同步有关的相同错误。

我检查了数据库表字段定义,它看起来不错:

`last_login` datetime DEFAULT NULL

这是定义列的方式:

/**
 * @ORM\Column(type="datetime", nullable=true)
 */
private $last_login;

我发现了这个:https://github.com/doctrine/dbal/pull/2825

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

config.ymldoctrine.yaml(取决于Symfony的版本)中,设置数据库服务器的正确服务器版本。例如:

doctrine:
    # …
    dbal:
        # …
        server_version: mariadb-10.2.15

请注意mariadb前缀。

答案 1 :(得分:0)

当试图从MariaDB安装中导出服务器版本时,Doctrine似乎无法确定正确的MySQL API版本。

在配置中定义MySQL版本号可能会有所帮助。它在几个项目中为我做到了在Debian Stretch上使用MariaDB时。

# app/config/config.yml

doctrine:
    # …
    dbal:
        # …
        server_version: 5.7

这将导致Doctrine跳过自动检测MySQL版本并使用最新的API。

答案 2 :(得分:0)

我更改了 .env.local 中的 DATABASE_URL 并且它起作用了。 之前(没用)

DATABASE_URL=mysql://root:password@127.0.0.1:3306/db?serverVersion=10.4.12

之后(最终工作)

DATABASE_URL=mysql://root:password@127.0.0.1:3306/db?serverVersion=mariadb-10.4.12