mysql datetime NOT NULL DEFAULT '0000-00-00 00:00:00' 无效

Posted mrshao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql datetime NOT NULL DEFAULT '0000-00-00 00:00:00' 无效相关的知识,希望对你有一定的参考价值。

mysql datetime NOT NULL DEFAULT \'0000-00-00 00:00:00\' 无效

创建表时,数据类型为datetime,默认值为0000-00-00 00:00:00时报错,google下,大意是说0000-00-00 00:00:00 在mysql5.7中为非标准时间,所以错误

解决办法:

  1. show variables like \'sql_mode\';
  2. 查看sql_model中的值是否有NO_ZERO_IN_DATE,NO_ZERO_DATE这两个,如有则继续下面步骤
  3. set session sql_mode=\'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION\' 这个步骤是删除上面的NO_ZERO_IN_DATE,NO_ZERO_DATE,因为他俩禁止了0000这样的日期和时间,因此重新设置sql_mode,去掉这两项就可以了
  4. 执行成功后再执行sql应该就可以了
  • 需要注意的事项
  • 设置sql_mode有两种方式
  • 第一种:set session sql_mode =\'xxxx\'
  • 第二种: set global sql_mode =\'xxxx\'
  • 区别:set session和set global,一个是当前会话,一个是全局,SESSION为默认选项
  • 参考示例:SET [SESSION|GLOBAL] sql_mode=\'modes\'
  • 权威的说法:SESSION(默认为选项):表示当前回话中生效;GLOBAL(需重启MySql):表示全局生效
  • 如果你是使用客户端Navicat等工具操作的,有很大的可能性你会打开多个窗口,如果你在一个窗口中使用set session sql_mode=\'xxxx\'修改sql_mode的值,然后另一个窗口中执行之前报错的sql,你会发现还是会报那个错误,因为SESSION是表示当前会话中生效,切记。

以上是关于mysql datetime NOT NULL DEFAULT '0000-00-00 00:00:00' 无效的主要内容,如果未能解决你的问题,请参考以下文章

DateTime.MaxValue 在 mysql 中保存为零

MySQL Unable to convert MySQL datetime value to System.DateTime 解决方案

在查询中将 DateTime.Ticks 转换为 MySQL DateTime

无法使用 0000-00-00 00:00:00 值将 MySQL.DateTime 转换为 System.DateTime

如何在 MySQL 中舍入 DateTime?

使用 C# 为 MySQL 转换 DateTime