博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MYSQL timestamp NOT NULL插入NULL的报错问题
阅读量:4473 次
发布时间:2019-06-08

本文共 1851 字,大约阅读时间需要 6 分钟。

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=3306default-character-set=utf8[mysqld]#解压目录basedir=D:\MYSQL\#解压目录下data目录datadir=D:\MYSQL\dataport=3306character_set_server=utf8#导出mysql数据的目录secure_file_priv = D:\MYSQL\datasql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES#开启查询缓存explicit_defaults_for_timestamp=trueskip-grant-tables[WinMySQLAdmin]D:\MYSQL\mysqld.exe

  

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

 

问题总结:

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

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

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

 

转载于:https://www.cnblogs.com/lonecloud/p/9732396.html

你可能感兴趣的文章
C04 模块化开发
查看>>
晶晶赴约会(东方化改题+现写的题解)
查看>>
关于selenium的8种元素定位
查看>>
了解使用nginx
查看>>
AC自动机及KMP练习
查看>>
java_2018_Day7_形式参数问题
查看>>
java06作业归档
查看>>
jQueryCDN
查看>>
.31-浅析webpack源码之doResolve事件流(3)
查看>>
SQL GROUP BY对多个字段进行分组
查看>>
加上快捷键,让你的网站酷起来
查看>>
2015-03-12——简析DOM2级事件
查看>>
接口之代理模式
查看>>
QT编译时 cc1plus进程占用大量内存卡死问题解决
查看>>
意大利多洛米蒂 随手一拍都是大片
查看>>
软件工程结队作业01
查看>>
java枚举应用
查看>>
UVa 11478 - Halum(二分+差分约束+Bellman)
查看>>
bzoj2049Cave 洞穴勘测
查看>>
CardboardSDK-iOS 源码简单分析
查看>>