You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony Doctrine执行schema:update时datetime字段默认值报错

问题原因

MySQL 5.7中,当DATETIME(6)(带微秒精度)字段设置DEFAULT CURRENT_TIMESTAMP(秒精度)时,会因精度不匹配触发1067 Invalid default value错误。Doctrine生成的SQL里,liked_date_time字段是DATETIME(6)但默认值用了不带微秒的CURRENT_TIMESTAMP,导致规则冲突。此外,若MySQL启用了STRICT_TRANS_TABLES、NO_ZERO_DATE这类严格模式,会进一步放大该问题。

解决方案

方案1:匹配默认值与字段精度

修改实体注解,将默认值改为带微秒的CURRENT_TIMESTAMP(6),和字段的DATETIME(6)精度保持一致:

/**
 * @var \DateTime
 * @ORM\Column(type="datetime", options={"default":"CURRENT_TIMESTAMP(6)"})
 */
private $likedDateTime;

方案2:禁用Doctrine的datetime微秒精度

在Symfony的Doctrine配置文件(config/packages/doctrine.yaml)中,设置DBAL平台选项,让datetime类型不生成微秒精度的字段:

doctrine:
    dbal:
        # 保留原有其他配置
        platform_options:
            use_datetime_with_microseconds: false

方案3:调整MySQL的sql_mode(临时应急)

临时关闭严格模式相关参数,执行schema更新后再恢复原有配置:

SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

执行完php bin/console doctrine:schema:update --force后,建议恢复之前的sql_mode设置。

内容的提问来源于stack exchange,提问作者noname

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:07:24