之前没太注意timestamp这个数据类型,有个坑就是在默认值上,MySql-5.6.6弃用了explicit_defaults_for_timestamp这个系统变量。我的版本却高于5.6.6,所以就掉进去了,囧。

如果你的mysql版本高于5.6.6,在创建下表时,报ERROR 1067 (42000): Invalid default value for 'ctime'

create table mytime (id int,atime timestamp not null,ctime timestamp not null
);

那么恭喜中枪了!

看看mysql官网上的官网解释吧:

timestamp.png

从图中可以看出来,explicit_default_for_timestamp是解决这个问题的关键点。

explicit_defaults_for_timestamp=false时,按照如下规则"初始化":

off_default_timestamp.png

  • 未明确声明为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”,并且不会发生警告。

explicit_defaults_for_timestamp=true时,按照如下规则"初始化":

no_default_timestamp.png

  • 未明确声明为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中添加或修改explicit_defaults_for_timestamp=true

注:修改时不一定在my.cnf中,而是在my.cnf中指定的文件中,我的是写在指定的子文件中的,一开始修改时也挺蒙圈的,附一段内容,方便查找修改。

mysql_my_cnf.png

修改完文件,使文件生效后,再试试创建上面的表,就ok啦~

作者:x_zhaohu
链接:https://www.jianshu.com/p/d7d364745173
來源:简书

MySql系统变量explicit_defaults_for_timestamp相关推荐

  1. 9、MySQL系统变量(查看和修改)

    在 MySQL 数据库,变量分为系统变量和用户自定义变量.系统变量以 @@ 开头,用户自定义变量以 @ 开头. 服务器维护着两种系统变量,即全局变量(GLOBAL VARIABLES)和会话变量(SE ...

  2. mysql系统变量_MySQL系统变量

    @v是用户自定义的变量set @a="1" @@是mysql系统变量select @@version_comment, @@global.xxxx, @@session.xxxx, ...

  3. MySQL 系统变量(system variables)

    MySQL系统变量(system variables)实际上是一些系统参数,用于初始化或设定数据库对系统资源的占用,文件存放位置等等.这些个系统变量可以分为全局以及会话级别层面来修改,有些也可以进行动 ...

  4. MySQL系统变量和自定义变量

    1 系统变量 1.1 查看系统变量 可以使用以下命令查看 MySQL 中所有的全局变量信息. SHOW GLOBAL VARIABLES; MySQL 中的系统变量以两个"@"开头 ...

  5. MySQL系统变量auto_increment_increment与auto_increment_offset学习总结

    在MySQL中,系统变量auto_increment_increment与auto_increment_offset是与自增列相关的两个参数变量.在官方文档中,将其划分为Replication Mas ...

  6. mysql系统变量详解

    mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选项来更改这些默认值.服务 ...

  7. mysql系统变量_MySQL 系统变量(system variables)

    3.全局与会话级别设置示例 --如何设置隔离级别 mysql> help isolation Name: 'ISOLATION' Description: Syntax: SET [GLOBAL ...

  8. mysql系统变量配置文件_MySQL系统变量配置基础

    MySQL变量的概念 个人认为可以理解成MySQL在启动或者运行过程中读取的一些参数问题,利用这些参数来启动服务.响应或者支持用户的请求等 变量的配置 如果打算长期使用,应该写入配置文件,而不是在命中 ...

  9. mysql中括号_mysql进阶知识点,启动项、系统变量、字符集介绍!

    点击上方「蓝字」关注我们 mysql数据库是当前应用最为的广泛的数据库,在实际工作中也经常接触到.真正用好mysql也不仅仅是会写sql就行,更重要的是真正理解其内部的工作原理.本文先从宏观角度介绍一 ...

最新文章

  1. ubuntu16.04 opencv多版本管理与切换
  2. Android Toast自己定义Toast例子
  3. 使命召唤 战区:战术竞技新思路,卷入RPG元素的激烈战斗
  4. 计算智能-群智能算法-蚁群算法matlab实现
  5. 前端开发笔记(2)css基础(上)
  6. 为什么CRM WebClient UI每次点了回车都会触发到后台的roundtrip
  7. rtmp/rtsp/hls公网真正可用的测试地址
  8. java shell排序_八大排序算法——希尔(shell)排序
  9. android 清空数组缓存,Android数据持久化之读写SD卡中内容的方法详解
  10. git 命令总结(转)
  11. 关于win10系统常用的c盘清理技巧
  12. 优盘(U 盘) 采用TLC, MLC, SLC芯片 的区别 与使用寿命
  13. 基于线上问答社区的逻辑性知识自动问答接口ZhidaoChatbot
  14. 坚果云教你几招提升你办公效率的技巧!
  15. C# 键盘中的按键对应的KeyValue
  16. 【转载】太厉害了,终于有人能把TCP/IP 协议讲的明明白白了
  17. 专精特新中小企业认定标准
  18. python与人工智能有关系吗_Python与人工智能到底有什么关系呢?Python学习
  19. oracle中的flag,MMT 表中的 Cost_Flag=E,如何解决?
  20. widerface人脸数据集,yolo训练集格式,voc训练集格式

热门文章

  1. 【大数据-Hadoop】Spark
  2. 【待继续研究】建模-听说你的坏样本不太够
  3. 效率达CPU一万倍、内含800万神经元:英特尔发布神经形态芯片超算
  4. 如何构建 FinTech 科学反欺诈体系|架构师实践日
  5. LSTM模型在问答系统中的应用 2017-06-27 21:03 在问答系统的应用中,用户输入一个问题,系统需要根据问题去寻找最合适的答案。 1:采用句子相似度的方式。根据问题的字面相似度选择相似度最
  6. 让餐厅放心的云服务-雅座CRM技术解密
  7. font awesome java_Android使用Font Awesome显示小图标(一)
  8. BF,KMP,BM三种字符串匹配算法性能比较
  9. 深入理解分布式技术 - 配置中心
  10. APM - 零侵入监控JDBC服务