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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介:

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,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 关系型数据库 MySQL
mysql使用default给列设置默认值的问题
mysql使用default给列设置默认值的问题
426 0
|
关系型数据库 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'报错的解决方法
580 0
|
关系型数据库 MySQL Serverless
MySQL DATETIME 查询条件
MySQL DATETIME 查询条件
1057 1
|
关系型数据库 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
1331 2
|
SQL 资源调度 关系型数据库
实时计算 Flink版产品使用合集之在抓取 MySQL binlog 数据时,datetime 字段会被自动转换为时间戳形式如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
241 2
|
SQL 存储 索引
MySQL设计规约问题之为什么应该把字段定义为NOT NULL并且提供默认值
MySQL设计规约问题之为什么应该把字段定义为NOT NULL并且提供默认值
|
Oracle 关系型数据库 MySQL
Seata常见问题之Seata1.5.2 mysql8 datetime 在undolog 中不能序列化如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
|
关系型数据库 MySQL 数据处理
实时计算 Flink版产品使用合集之如果在 MySQL 表中为某个字段设置了默认值,并且在插入数据时指定了该字段为 NULL,那么 MySQL 是否会使用默认值来填充这个字段
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
180 0
|
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
1025 0
|
存储 关系型数据库 MySQL
【Mysql】The DATE, DATETIME, and TIMESTAMP Types(二)
【Mysql】The DATE, DATETIME, and TIMESTAMP Types
383 0
【Mysql】The DATE, DATETIME, and TIMESTAMP Types(二)

推荐镜像

更多