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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
关系型数据库 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'报错的解决方法
|
存储 关系型数据库 MySQL
Mysql - 如何决定用 datetime、timestamp、int 哪种类型存储时间戳?
Mysql - 如何决定用 datetime、timestamp、int 哪种类型存储时间戳?
2073 0
|
6月前
|
关系型数据库 MySQL Unix
【MySQL用法】MySQL 中 datetime 和 timestamp 的区别与选择
【MySQL用法】MySQL 中 datetime 和 timestamp 的区别与选择
121 0
|
2月前
|
SQL 存储 关系型数据库
【Mysql】The DATE, DATETIME, and TIMESTAMP Types
【Mysql】The DATE, DATETIME, and TIMESTAMP Types
45 0
|
4月前
|
存储 关系型数据库 MySQL
MySQL中的date、datetime、timestamp有什么区别?
MySQL中的date、datetime、timestamp有什么区别?
47 0
|
4月前
|
存储 关系型数据库 MySQL
【Mysql】The DATE, DATETIME, and TIMESTAMP Types(二)
【Mysql】The DATE, DATETIME, and TIMESTAMP Types
34 0
【Mysql】The DATE, DATETIME, and TIMESTAMP Types(二)
|
4月前
|
SQL 存储 关系型数据库
【Mysql】The DATE, DATETIME, and TIMESTAMP Types(一)
【Mysql】The DATE, DATETIME, and TIMESTAMP Types
27 0
【Mysql】The DATE, DATETIME, and TIMESTAMP Types(一)
|
8月前
|
存储 关系型数据库 MySQL
每天一道面试题之-mysql中datetime和timestamp的区别
每天一道面试题之-mysql中datetime和timestamp的区别
73 0
|
关系型数据库 MySQL
MySQL DATE字段,默认为CURDATE()不是DATETIME
MySQL DATE字段,默认为CURDATE()不是DATETIME
190 0
|
关系型数据库 MySQL Unix
MySQL 中 datetime 和 timestamp 的区别与选择
MySQL 中常用的两种时间储存类型分别是datetime和 timestamp。如何在它们之间选择是建表时必要的考虑。下面就谈谈他们的区别和怎么选择。
147 0
MySQL 中 datetime 和 timestamp 的区别与选择