mysql Symfony教义更新模式为datetime提供了无效的默认值

5jvtdoz2  于 2023-03-22  发布在  Mysql
关注(0)|答案(1)|浏览(110)

我以前确实没有遇到过这个问题,但是我只是尝试运行doctrine:schema:update,然后我得到了这个错误:
数据库状态[42000]:语法错误或访问冲突:1067“liked_date_time”的默认值无效
下面是我的实体中的有问题的字段

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

它生成的查询:

CREATE TABLE user_post_like (id INT AUTO_INCREMENT NOT NULL, post_id INT DEFAULT NULL, image_id INT DEFAULT NULL, user_id INT DEFAULT NULL, liked_date_time DATETIME(6) DEFAULT CURRENT_TIMESTAMP NOT NULL, d  
  eleted TINYINT(1) DEFAULT '0' NOT NULL, deleted_date_time DATETIME(6) DEFAULT NULL, INDEX IDX_65D6AA5C4B89032C (post_id), INDEX IDX_65D6AA5C3DA5256D (image_id), INDEX IDX_65D6AA5CA76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb  
  4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB

我看不出这有什么问题?它一直工作得很好,突然就不行了
我在这里使用的是mysql5.7和symfony 5以及doctrism 2

im9ewurl

im9ewurl1#

https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
如果TIMESTAMP或DATETIME列定义在任何地方包含显式小数秒精度值,则必须在整个列定义中使用相同的值。允许这样做:

CREATE TABLE t1 (
  ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
);

这是不允许的:

CREATE TABLE t1 (
  ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(3)
);

不允许的示例显示了精度不匹配的两种情况。默认值没有精度。on update参数有一个精度,但与列的精度不同。
该示例还显示了TIMESTAMP,但同样的问题也会影响DATETIME。
我不知道如何说服Doctrine生成正确的DDL语句。但这就是错误的含义。如果我用DEFAULT CURRENT_TIMESTAMP(6)测试你的DDL语句,它就能工作。

相关问题