我以前确实没有遇到过这个问题,但是我只是尝试运行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
1条答案
按热度按时间im9ewurl1#
https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
如果TIMESTAMP或DATETIME列定义在任何地方包含显式小数秒精度值,则必须在整个列定义中使用相同的值。允许这样做:
这是不允许的:
不允许的示例显示了精度不匹配的两种情况。默认值没有精度。on update参数有一个精度,但与列的精度不同。
该示例还显示了TIMESTAMP,但同样的问题也会影响DATETIME。
我不知道如何说服Doctrine生成正确的DDL语句。但这就是错误的含义。如果我用
DEFAULT CURRENT_TIMESTAMP(6)
测试你的DDL语句,它就能工作。