IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    MySQL datetime default 0000-00-00 00:00:00❤

    obaby发表于 2024-05-10 13:11:51
    love 0

    本来以为是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了。



沪ICP备19023445号-2号
友情链接