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

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

☆版权☆

* 网站名称:obaby@mars
* 网址:https://obaby.org.cn/
* 个性:https://oba.by/
* 本文标题: 《MySQL datetime default 0000-00-00 00:00:00❤》
* 本文链接:https://obaby.org.cn/2024/05/16942
* 短链接:https://oba.by/?p=16942
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

20 comments

  1. Level 4
    Microsoft Edge 120 Microsoft Edge 120 Windows 11 Windows 11 cn中国–广东–广州 电信

    新版本要求更严格,跟PHP一样,很多在就版本没问题的函数,在新版本直接warning

    1. 公主 Queen 
      Google Chrome 120 Google Chrome 120 Windows 10 Windows 10 cn中国–山东–青岛 联通

      这个默认值旧版本也会报错,所以才升级的。现在看来不是版本问题。

    1. 公主 Queen 
      Google Chrome 124 Google Chrome 124 Android 10 Android 10 cn中国–山东–青岛 联通

      顺便把字符集的问题也解决啦 之前有的emoji存储🈶问题

      1.   Level 7
        Safari 17 Safari 17 iPhone iOS 17.4.1 iPhone iOS 17.4.1 cn中国–浙江–杭州 华数

        emoji 我在 windows 和安卓手机上看有很多口。不管了。

  2. Level 5
    Google Chrome 124 Google Chrome 124 Windows 11 Windows 11 cn中国–湖北–武汉 联通

    突然想起来我本地的MySQL已经寄了几个月了,一直忘了修 cry

      1. Level 5
        Google Chrome 124 Google Chrome 124 Windows 11 Windows 11 cn中国–湖北–武汉 联通

        没有没有,服务器里的是正常的,我说的是我自己的电脑上的,那确实不常用

        1. 公主 Queen 
          Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

          酱紫,那不常用就无所谓啦。等需要的时候再修复

  3. Level 4
    Google Chrome 86 Google Chrome 86 Windows 10 Windows 10 cn中国–北京–北京 联通

    mysql 还用5呢 部分程序的php 倒是已经升级到8了

  4. Level 4
    Microsoft Edge 124 Microsoft Edge 124 Windows 10 Windows 10 cn中国–江苏–宿迁 移动

    现在很多人都把MYsql升到了8.0,我还是没有勇气升,感觉能用就行,不求最新。

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      嗯嗯,能跑就尽量不要折腾,太容易出问题了。

  5. Level 6
    Microsoft Edge 124 Microsoft Edge 124 Windows 10 Windows 10 us美国–加利福尼亚州–洛杉矶–洛杉矶

    用画笔工具把肉丝上的字母去掉好看多了

  6.  Level 6
    Microsoft Edge 124 Microsoft Edge 124 Windows 11 Windows 11 cn中国–北京–北京 移动/中国移动北京分公司

    我想8.2升级8.4,结果数据库直接崩溃了~

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      哈哈哈。千万别折腾了,哎,都这么劝别人,到了自己这里依然是继续折腾啊。 rofl

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注