mysql5.7 datetime 默认值0000-00-00 00:00:00出错

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

mysql5.7 datetime 默认值0000-00-00 00:00:00出错

实验环境:MySQL 5.7.17

使用wordpress的表wp_posts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mysql >  CREATE  TABLE  `wp_posts` (
     ->   `ID`  bigint (20) unsigned  NOT  NULL  AUTO_INCREMENT,
     ->   `post_author`  bigint (20) unsigned  NOT  NULL  DEFAULT  '0' ,
     ->   `post_date` datetime  NOT  NULL  DEFAULT  '0000-00-00 00:00:00' ,
     ->   `post_date_gmt` datetime  NOT  NULL  DEFAULT  '0000-00-00 00:00:00' ,
     ->   `post_content` longtext  NOT  NULL ,
     ->   `post_title` text  NOT  NULL ,
     ->   `post_excerpt` text  NOT  NULL ,
     ->   `post_status`  varchar (20)  NOT  NULL  DEFAULT  'publish' ,
     ->   `comment_status`  varchar (20)  NOT  NULL  DEFAULT  'open' ,
     ->   `ping_status`  varchar (20)  NOT  NULL  DEFAULT  'open' ,
     ->   `post_password`  varchar (20)  NOT  NULL  DEFAULT  '' ,
     ->   `post_name`  varchar (200)  NOT  NULL  DEFAULT  '' ,
     ->   `to_ping` text  NOT  NULL ,
     ->   `pinged` text  NOT  NULL ,
     ->   `post_modified` datetime  NOT  NULL  DEFAULT  '0000-00-00 00:00:00' ,
     ->   `post_modified_gmt` datetime  NOT  NULL  DEFAULT  '0000-00-00 00:00:00' ,
     ->   `post_content_filtered` longtext  NOT  NULL ,
     ->   `post_parent`  bigint (20) unsigned  NOT  NULL  DEFAULT  '0' ,
     ->   `guid`  varchar (255)  NOT  NULL  DEFAULT  '' ,
     ->   `menu_order`  int (11)  NOT  NULL  DEFAULT  '0' ,
     ->   `post_type`  varchar (20)  NOT  NULL  DEFAULT  'post' ,
     ->   `post_mime_type`  varchar (100)  NOT  NULL  DEFAULT  '' ,
     ->   `comment_count`  bigint (20)  NOT  NULL  DEFAULT  '0' ,
     ->    PRIMARY  KEY  (`ID`),
     ->    KEY  `post_name` (`post_name`(191)),
     ->    KEY  `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`),
     ->    KEY  `post_parent` (`post_parent`),
     ->    KEY  `post_author` (`post_author`)
     -> ) ENGINE=innodb AUTO_INCREMENT=536  DEFAULT  CHARSET=utf8;
ERROR 1067 (42000): Invalid  default  value  for  'post_date'


出现以上问题:是因为mysql5.7版本后,sql_mode参数被设置了NO_ZERO_IN_DATE,NO_ZERO_DATE

1
2
3
4
5
6
7
mysql > show variables  like  '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_ENGINE_SUBSTITUTION |
+ ---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row  in  set  (0.01 sec)


解决方法:

方法一:临时修改方法

1
2
mysql>  set  global   sql_mode= 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'  ;
mysql>  set  session  sql_mode= 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'  ;


方法二:永久修改方法,需要重启mysql服务:修改mysql的配置文件my.cnf,添加以下参数

1
  sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION //实际是去除NO_ZERO_IN_DATE,NO_ZERO_DATE

 

方法三:修改datetime的默认值



本文转自 corasql 51CTO博客,原文链接:http://blog.51cto.com/corasql/1913178,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL 关系型数据库 MySQL
mysql使用default给列设置默认值的问题
mysql使用default给列设置默认值的问题
154 0
|
7月前
|
关系型数据库 MySQL Docker
MySQL 5.7 timestamp类型设置default value为'0000-00-00 00:00:00'报错的解决方法
MySQL 5.7 timestamp类型设置default value为'0000-00-00 00:00:00'报错的解决方法
199 0
|
2月前
|
关系型数据库 MySQL Serverless
MySQL DATETIME 查询条件
MySQL DATETIME 查询条件
93 1
|
4月前
|
关系型数据库 MySQL
解决MySQL insert出现Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘xxx‘ at row 1
解决MySQL insert出现Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘xxx‘ at row 1
366 2
|
5月前
|
SQL 存储 索引
MySQL设计规约问题之为什么应该把字段定义为NOT NULL并且提供默认值
MySQL设计规约问题之为什么应该把字段定义为NOT NULL并且提供默认值
|
7月前
|
SQL 资源调度 关系型数据库
实时计算 Flink版产品使用合集之在抓取 MySQL binlog 数据时,datetime 字段会被自动转换为时间戳形式如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
84 2
|
7月前
|
关系型数据库 MySQL 数据处理
实时计算 Flink版产品使用合集之如果在 MySQL 表中为某个字段设置了默认值,并且在插入数据时指定了该字段为 NULL,那么 MySQL 是否会使用默认值来填充这个字段
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7月前
|
Oracle 关系型数据库 MySQL
Seata常见问题之Seata1.5.2 mysql8 datetime 在undolog 中不能序列化如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
|
7月前
|
Java 数据库
SpringBoot出现com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime va
SpringBoot出现com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime va
470 0
|
7月前
|
SQL 存储 关系型数据库
【Mysql】The DATE, DATETIME, and TIMESTAMP Types
【Mysql】The DATE, DATETIME, and TIMESTAMP Types
104 0