Symfony 对于可为空的列,数据库架构不同步
刚刚发现Symfony 对于可为空的列,数据库架构不同步,symfony,doctrine-orm,mariadb,Symfony,Doctrine Orm,Mariadb,刚刚发现条令:schema:validate引发了一个错误: [错误]数据库架构与当前映射文件不同步 所以我尝试了原则:schema:update--force--complete--dump sql,这是成功的: 将执行以下SQL语句: ALTER TABLE user CHANGE last_login `last_login` DATETIME DEFAULT NULL; 正在更新数据库架构 1 query was executed [确定]数据库架构已成功更新 但如果我再次运行原
条令:schema:validate
引发了一个错误:
[错误]数据库架构与当前映射文件不同步
所以我尝试了原则:schema:update--force--complete--dump sql
,这是成功的:
将执行以下SQL语句:
ALTER TABLE user CHANGE last_login `last_login` DATETIME DEFAULT NULL;
正在更新数据库架构
1 query was executed
[确定]数据库架构已成功更新
但如果我再次运行原则:schema:validate
,它会抛出与schema不同步有关的相同错误
我已经检查了数据库表字段定义,它看起来不错:
`last_login` datetime DEFAULT NULL
这就是列的定义方式:
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $last_login;
我发现:
有什么想法吗?在尝试从MariaDB安装派生服务器版本时,Doctrine似乎在确定正确的MySQL API版本时遇到了问题 在配置中定义MySQL版本号可能会有所帮助。它在几个项目中对我起了作用,例如在Debian Stretch上使用MariaDB时
# app/config/config.yml
doctrine:
# …
dbal:
# …
server_version: 5.7
这将导致Doctrine跳过MySQL版本的自动检测,并使用最新的API。在
config.yml
或Doctrine.yaml
(取决于Symfony的版本)中,设置数据库服务器的正确服务器版本。例如:
doctrine:
# …
dbal:
# …
server_version: mariadb-10.2.15
请注意
mariadb
前缀。我在my.env.local中更改了数据库的URL,并且成功了。
以前(没有工作)
之后(终于工作了)
您使用的是哪个版本的
doctor/dbal
?doctor.dbal.server\u版本:“5.7”否,我指的是已安装软件包的版本(即运行composer show
时显示的内容)。它的定义如下:doctor.dbal.server\u版本:“5.7”
能否尝试将其设置为5.6
(之后清除缓存)?抱歉,没有,因为我已经迁移到MySQL
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