1. 在开发两个数据库数据同步功能的时候,需要在本地搭建一个本地的数据库作为一个本地库,然后用于同步开发库中的数据。在插入的时候出现了一个问题。

问题描述:

我们每张表中都会存在一个create_time 以及update_time两个字段。该两个字段的定义如下:

  `create_date` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期',
`update_date` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',

  其中创建时间采用timestamp类型并且其默认值为CURRENT_TIMESTAMP。

当我向数据库中插入一条数据的时候,create_time与Update_time设置为null的时候,开发库中会走默认值,但是本地库并不会,并且报错“create_time” cannot be null

问题解决:

查询google后发现

MySql系统变量explicit_defaults_for_timestamp: 该变量的作用为:

查看了一下解释

大概是这么说的:

当你设置为false的时候:

  • 未明确声明为NULL属性的TIMESTAMP列被分配为NOT NULL属性。 (其他数据类型的列,如果未显式声明为NOT NULL,则允许NULL值。)将此列设置为NULL将其设置为当前时间戳。
  • 表中的第一个TIMESTAMP列(如果未声明为NULL属性或显式DEFAULT或ON UPDATE子句)将自动分配DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属性。
  • 第一个之后的TIMESTAMP列(如果未声明为NULL属性或显式DEFAULT子句)将自动分配DEFAULT'0000-00-00 00:00:00'(“零”时间戳)。 对于不指定此列的显式值的插入行,该列将分配“0000-00-00 00:00:00”,并且不会发生警告。

当你设置为true的时候:

  • 未明确声明为NOT NULL的TIMESTAMP列允许NULL值。 将此列设置为NULL将其设置为NULL,而不是当前时间戳。
  • 没有TIMESTAMP列自动分配DEFAULT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP属性。 必须明确指定这些属性。
  • 声明为NOT NULL且没有显式DEFAULT子句的TIMESTAMP列被视为没有默认值。 对于不为此列指定显式值的插入行,结果取决于SQL模式。 如果启用了严格的SQL模式,则会发生错误。 如果未启用严格的SQL模式,则会为列分配隐式默认值“0000-00-00 00:00:00”,并发出警告。 这类似于MySQL如何处理其他时间类型,如DATETIME。

查看我的本地库,发现我的my.cnf文件上居然加上了一个这么个玩意:

[client]
port=3306
default-character-set=utf8 [mysqld]
#解压目录
basedir=D:\MYSQL\
#解压目录下data目录
datadir=D:\MYSQL\data
port=3306
character_set_server=utf8
#导出mysql数据的目录
secure_file_priv = D:\MYSQL\data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#开启查询缓存
explicit_defaults_for_timestamp=true
skip-grant-tables [WinMySQLAdmin]
D:\MYSQL\mysqld.exe

  

后悔后悔,没有好好看配置啊。直接copy。。。。

问题总结:
  1. timestamp如果想设置为not null,则必须要设置默认值。建议设置为当前时间即可

2. explicit_defaults_for_timestamp 这个参数已经在5.6版本已经弃用了,不建议采用该配置了

3. 好好看配置文件,不要乱copy

MYSQL timestamp NOT NULL插入NULL的报错问题的更多相关文章

  1. MySQL timestamp NOT NULL插入NULL的问题

    explicit_defaults_for_timestamp MySQL 5.6版本引入 explicit_defaults_for_timestamp 来控制对timestamp NULL值的处理 ...

  2. 连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的,

    连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的, 2018-03-12 17:08:52.532DEBUG[localhost-startStop-1]o.s.beans.factor ...

  3. 【原创】MySQL Can't create a new thread报错分析

    今天有两台服务器都出现了Can't create a new thread报错. [故障处理过程] 故障发生后登录服务器,检查mysql进程正常,但登录mysql报下面错误 ERROR 1135 (H ...

  4. mysql中大数据表alter增加字段报错:"1034 Incorrect key file for table 'table_name'; try to repair it"

    mysql中大数据表alter增加字段报错:"1034 Incorrect key file for table 'table_name'; try to repair it" 现 ...

  5. mysql 5.7.28 中GROUP BY报错问题 SELECT list is not in GROUP BY clause and contains no

    ----mysql 5.7.28 中GROUP BY报错问题 SELECT list is not in GROUP BY clause and contains no------ 解决方案: sel ...

  6. Mysql in子查询中加limit报错

    Mysql in子查询中加limit报错 select id from aa where id in ( select id from bb limit 10 ); 改写成 SELECT id FRO ...

  7. 【SQLServer2008】之改变主键当为null时也不会报错,可以入数据库。

    在SqlServer红框中设置主键,右键会有添加主键选项,并且设置不能为null. 当我们插入主键数据如果为null时,会插不进去,这时候我们需要修改一下,如下图: “标识规范”中选择“是”,就可以了 ...

  8. MySql数据库插入或更新报错:Cannot add or update a child row: a foreign key constraint fails

    具体报错信息: Cannot add or update a child row: a foreign key constraint fails (`xxx`.`AAA`, CONSTRAINT `t ...

  9. 解决:oracle+myBatis ResultMap 类型为 map 时返回结果中存在 timestamp 时使用 jackson 转 json 报错

    前言:最近在做一个通用查询单表的组件,所以 sql 的写法就是 select *,然后 resultType="map" ,然后使用 jackson @ResponseBody 返 ...

随机推荐

  1. jdk下载及环境变量配置

    一.下载 下载链接 二.环境变量:

  2. C#复习笔记(3)--C#2:解决C#1的问题(可空值类型)

    可空值类型 C#2推出可空类型来表示可以为null的值类型.这是一个呼声很高的需求,因为在常用的数据库中都是允许某些值类型可为空的.那么为什么值类型就不能为空呢?内存中用一个全0的值来表示null,但 ...

  3. java.lang(StringBuffer)

    public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharS ...

  4. [转帖]迎战AMD 7nm 64核EPYC 英特尔至强也玩起了胶水以及性价比

    迎战AMD 7nm 64核EPYC 英特尔至强也玩起了胶水以及性价比 Intel 最强CPU 从最开始的双核 到现在的 28核 发展迅猛. https://www.cnbeta.com/article ...

  5. [转帖]IP /TCP协议及握手过程和数据包格式中级详解

    IP /TCP协议及握手过程和数据包格式中级详解 https://www.toutiao.com/a6665292902458982926/ 写的挺好的 其实 一直没闹明白 网络好 广播地址 还有 网 ...

  6. AngularJS双向数据绑定

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 50分钟学会Laravel 50个小技巧(基于laravel5.2,仅供参考)

    转载请注明:转载自 Yuansir-web菜鸟 | LAMP学习笔记 本文链接地址: 50分钟学会Laravel 50个小技巧 原文链接:< 50 Laravel Tricks in 50 Mi ...

  8. day 7-6 多线程及开启方式

    一. 什么是线程 线程:顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程 ...

  9. CRM/PLM/SCM/MES与ERP的联系与区别

    企业通过专设信息机构.信息主管,配备适应现代企业管理运营要求的自动化.智能化.高技术硬件.软件.设备.设施,建立包括网络.数据库和各类信息管理系统在内的工作平台,提高企业经营管理效率的发展模式. 那么 ...

  10. shell中数组及其相关操作

    转载 https://blog.csdn.net/jerry_1126/article/details/52027539