【问题标题】:Error in Doctrine Migrations教义迁移的错误
【发布时间】:2018-03-14 16:44:21
【问题描述】:

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

'ALTER TABLE video_en ADD CONSTRAINT FK_65A1A65C1B53C8FE FOREIGN KEY (portuguese_id) REFERENCES video_pt (id) ON DELETE SET NULL'

我收到此错误:

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

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

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

【问题讨论】:

    标签: mysql symfony doctrine migration


    【解决方案1】:

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

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

    无论您是在mysql 还是sql,“0000...”都不是有效日期。但是,int 0、null 和格式错误的日期在将它们转换为日期时间时通常会被强制存储为 this。

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

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

    【讨论】:

    • 我设置为正确,因为你给了我这个想法,但如果我执行你的提案查询,问题仍然存在,我的意思是我得到同样的错误,因为我也不能使用这个日期“00:00:00”为了根据您的想法进行比较,我决定执行以下查询: UPDATE video_en SET publication_date = "1970-01-01" WHERE publication_date
    • 更新了答案以反映您的发现。应该能够将时间设置为 0,但你对 where 子句是正确的。那永远不会像我那样奏效。谢谢,祝您编码愉快!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2021-08-30
    • 2015-12-25
    相关资源
    最近更新 更多