mysql - Doctrine 迁移中的错误

标签 mysql symfony doctrine migration

我在一个旧项目中使用 symfony (2.6.9) 和 Doctrine 。当我开始在这里工作时,我意识到一些迁移已被执行,然后被删除以保留历史记录。所以我不能不复制生产数据库的当前状态。因此,从生产中创建数据库备份并将其安装在我的本地环境中。然后,当我尝试使用 symfony 执行新的迁移时。执行此查询时出现错误:

'更改表 video_en 添加约束 FK_65A1A65C1B53C8FE 外键 (portuguese_id) 引用 video_pt (id) 删除设置 NULL'

我收到此错误:

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '0000-00-00 00:00:00' for column 'publication_date' at row 1

我认为问题与数据库中的旧数据有关。因此,我想在生产中执行迁移并保留所有数据。

很高兴知道,如果我在干净的环境中执行迁移。它正在工作(但正如我在第一段中所写的那样,在生产中执行了一些代码中没有的迁移)。

最佳答案

在没有看到你的表格结构的情况下,我只能猜测。但是,根据您在此处发布的内容,如果这是迁移命令导致该错误,则只有一个原因:

列:video_en.publication_date 在某些时候以另一种格式存储日期时间,并且迁移无法正确地将日期从一种格式更改为另一种格式。

无论您是在mysqlsql ,“0000...”不是有效日期。然而,int 0、null 和格式错误的日期在将其转换为日期时间时通常会被强制存储为这样。

解决此问题应该像对表运行批量更新一样简单:

UPDATE video_en SET publication_date = '2017-08-28' WHERE publication_date = < '1970-01-01';

关于mysql - Doctrine 迁移中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45921308/

相关文章:

forms - 表单事件监听器中的 Symfony2 验证值?

php - 如何从mysql表中获取数组的单个值并在搜索中使用

mysql - 销售总额...枢轴还是转置?

python Django 迁移问题

mysql - 在长时间运行的后台脚本中处理原则 2 连接

symfony - 如何将动态数量的输入值传递给 Symfony2.1 中的 Controller

mongodb - Doctrine ODM (MongoDB) - 获取对象的完整数组?

php - Doctrine - 如何在 postSave() 事件中获取 SQL INSERT 查询?

mysql - 如何使用Mysql数据库CONCAT AND Group Concat函数创建json数据

php - 如何在 DBALException 后重新打开 Doctrine Entity Manager