解决:mysql timestamp默认值0000-00-00 00:00:00 报错

一. 问题的引出

我们在用mysql5.7创建表时,如果把timestamp(时间戳)的默认值设置为0000-00-00 00:00:00 的形式,将会产生一条报错:

  `RepaymentDate` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00‘ COMMENT ‘回款日期‘,

报错信息如下:

[Err] 1067 - Invalid default value for ‘RepaymentDate‘

二. 找出原因

这个问题和mysql中sql_mode有关系,我们可以采用两种方法来查看它的值

方法一

mysql> select @@sql_mode;
+---------------+-----------------------------------------------------------------------------------------------
---------------+
| Variable_name | Value
               |
+---------------+-----------------------------------------------------------------------------------------------
---------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGIN
E_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------
---------------+
1 row in set, 1 warning (0.01 sec)

方法二

mysql> select @@sql_mode;
+--------------------------------------------------------------------------------------------------------------+

| @@sql_mode                                                                                                   |

+--------------------------------------------------------------------------------------------------------------+

| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +--------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)

我们可以看到,默认会有:NO_ZERO_IN_DATE 和 NO_ZERO_DATE 两个值,限制字段不能为零日期

三. 问题的解决

网上有两种方法来解决这个问题

一种是修改配置文件

mysql5.7 版本中 timestamp 不能为零日期 以及sql_mode合理设置

Mysql 数据库date, datetime类型设置0000-00-00默认值报错问题

然而不知为何,修改配置文件,却不能成功

第二种是执行命令

MySQL中Invalid default value for ‘0000-00-00 00:00:00‘问题

mysql> set session sql_mode=‘ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION‘;

亲测这个是可以的:)

原文地址:https://www.cnblogs.com/cnhkzyy/p/9119339.html

时间: 2024-07-28 22:29:24

解决:mysql timestamp默认值0000-00-00 00:00:00 报错的相关文章

解决:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错

解决:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错 学习了:https://www.cnblogs.com/cnhkzyy/p/9119339.html set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; 用mysql dump方式好像可以通过

hibernate设置mysql的timestamp默认值技巧

首先,要想使用数据库中配置的默认值就必须不让hibernate覆盖了默认值,需要配置property insert="false" update="false",告诉hibernate不对该属性执行insert.update操作,这要就不会覆盖我们在数据库中配置的默认值了.除此之外,我们还需要配置hibernate对该表的操作,dynamic-insert="true" dynamic-update="true", 实现动态的

mysql字段默认值不生效的问题解决(上)

在项目中使用mybatis做为持久层框架,mysql数据库.项目上线前,DBA要求我们将每张数据库表中的字段都设置默认值和not null.之前项目中有一些insert语句是将表中所有字段都列出来,然后把它做为一个通用的插入语句来使用.举个简单的例子:假如一张数据库表blog中有如下几个字段:id,title,content,author,除id外,每个字段都设置了默认值Empty String(空字符串),写的一个insert语句是这样的: Java代码   <insert id="ad

关于mysql修改密码 set password for [email&#160;protected] = password(&#39;xxx&#39;);报错解决方法

当你安装好mysql后,发现mysql -u root -p直接按俩次enter竟然不用密码就能登录进去,可是navicat连接mysql需要密码啊.怎么办? 于是我通过百度寻觅良久发现多数都是通过下面的命令修改.但是自己执行时报下面的错. mysql> set password for [email protected] = password('123456'); ERROR 1064 (42000): You have an error in your SQL syntax; check t

Table &#39;.\mysql\proc&#39; is marked as crashed and should be repaired 报错

Table '.\MySQL\proc' is marked as crashed and should be repaired 报错 解决方法: 找到mysql的安装目录的bin/myisamchk工具,在命令行中输入: myisamchk -c -r ../data/mysql/proc.MYI 然后myisamchk 工具会帮助你恢复数据表的索引.重新启动mysql,问题解决. Table '.\mysql\proc' is marked as crashed and should be

Mysql 升级到 5.6 后插入语句时间字段报错:Incorrect datetime value: &#39;&#39; for column &#39;createtime&#39;

今天部署服务器项目运行,当遇见有时间数据对象的插入和更新操作的时候,就报错,如下: Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'createtime' at row 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2868) at com.mysql.jdbc.My

解决新建Support7Demos的sample时出现编译错误和运行报错出现的问题

右键New->Other->Android Sample Project->选择Android 4.4.2->选择Support7Demos ,finish. 会出现编译错误 解决如下: 1.把这三个文件导入到Eclipse里, 这三个是库文件,并且勾选COPY到工作空间里选项 如果没有这三个文件,就从这里下载 2.导入三个library工程后,mediarouter会无法编译,打开工程属性在anroid里将api-level改成17,添加依赖工程appcompat 3.就是将刚才

解决cordova命令行方式下build或者run的时候报错问题

phonegap3.0之后就将项目的生成方式做了很大的更改,原来是在eclipse里面修改生成并编译运行,但是3.0之后它的目录结构发生了很大变化,只修改主目录下面的index.html如果不build的话有时候是不起作用的,因为它的platform文件夹中还有各个平台的目录.比如安卓和IOS,在主目录www下面修改index.html之后必须要build才能生效,否则很多时候你会发现修改了不起作用,这是因为在assets目录下还有个www文件夹,真正运行的是这个文件夹下面的index.html

MySQL中默认值中用时间函数的问题

今天在上课的时候在测试MSSQL建表的时候 注册时间默认值用getdate()可以获取插入值时候的时间create table temp( id int PRIMARY key, in_time datetime NOT NULL default getdate() ) 但是在MYSQL建表练习的时候不能用now()进行对应的做法: create table temp(    id int PRIMARY key,    in_time datetime NOT NULL default now