本来以为是mysql版本的问题,上午搜索的时候也是这个错误,搜索了一下有的人说是mysql版本问题。于是上午尝试将mysql 从5.7升级到8.0,不出意外,又失败了,数据库丢失,并且mysql安装失败了。
下午晚上尝试优化数据库的时候又出现了这个错误:
又搜索了一下发现是mysql设置问题,下面是抄的百度ai的,不得不说,这段答复质量还是可以的:
在MySQL中,如果你尝试将一个日期时间字段(DATETIME)的默认值设置为’0000-00-00 00:00:00’,你可能会遇到一个错误,因为MySQL不允许使用’0000-00-00 00:00:00’作为有效的日期时间值。
解决方案:
修改MySQL配置文件:
你可以在MySQL的配置文件(通常是my.cnf或者my.ini)中设置sql_mode,将其设置为允许’0000-00-00 00:00:00’。
[mysqld] sql_mode=NO_ENGINE_SUBSTITUTION
然后重启MySQL服务。
使用NOW()或CURRENT_TIMESTAMP作为默认值:
如果你不需要’0000-00-00 00:00:00’作为默认值,你可以使用NOW()或CURRENT_TIMESTAMP作为默认值,这样在插入新行时,如果没有为DATETIME字段指定值,它将自动使用当前的日期时间。
CREATE TABLE example ( id INT PRIMARY KEY, created_at DATETIME DEFAULT NOW() );
使用ON INSERT触发器:
如果你需要’0000-00-00 00:00:00’作为默认值,但MySQL不允许,你可以使用INSERT触发器来在插入新行时设置默认值。
CREATE TABLE example ( id INT PRIMARY KEY, created_at DATETIME DEFAULT '0000-00-00 00:00:00' ); CREATE TRIGGER before_insert_example BEFORE INSERT ON example FOR EACH ROW BEGIN IF NEW.created_at = '0000-00-00 00:00:00' THEN SET NEW.created_at = NOW(); END IF; END;
请注意,在任何情况下,你都需要确保你的应用程序或数据库操作能够处理’0000-00-00 00:00:00’作为有效的日期时间值,因为它在MySQL中是一个特殊的标记。如果你的应用程序或者框架不支持这个值,你可能需要进行一些额外的处理。
只需要修改[mysqld] sql_mode=NO_ENGINE_SUBSTITUTION 配置,重启服务就可以了。白折腾半天,不过好处是用上么mysql8了。