MySQL从5.5升级到5.6,TIMESTAMP的变化

前言

前段时间,系统MySQL从5.5升级到了5.6,系统出现了大量的异常。大部分异常引起原因是由于TIMESTAMP的行为发生了变化。

TIMESTAMP在MySQL5.5中的行为

  • 第一个未设置默认值的TIMESTAMP NOT NULL字段隐式默认值: CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  • 后面未设置默认值的TIMESTAMP NOT NULL字段隐式默认值: 0000-00-00 00:00:00
  • TIMESTAMP NOT NULL字段插入NULL时,会使用隐式默认值: CURRENT_TIMESTAMP
  • 不支持多个CURRENT_TIMESTAMP 默认值

TIMESTAMP在MySQL5.6中的行为

  • 支持多个CURRENT_TIMESTAMP 默认值
  • 可以兼容5.5的行为,支持隐性默认值
    • explicit_defaults_for_timestamp=0
    • 我测试安装的MySQL5.6默认使用这个参数,启动时,服务器会给出一个警告。 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).
  • 可以去掉隐性默认值
    • explicit_defaults_for_timestamp=1

总结

  • MySQL5.5中TIMESTAMP行为是比较诡异的,会造成一些隐含的问题,比如程序中传入了NULL值
  • MySQL5.6中可以将TIMESTAMP的行为变得正常,但会存在兼容问题
  • explicit_defaults_for_timestamp参数未来会消失
  • 我们不要过度依赖数据库的特性,这些特性会给应用程序造成掣肘

参考:http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王磊的博客

MS SQL查询库、表、列数据结构信息汇总

前言 一般情况我们下,我们是知道数据库的表、列信息的(因为数据库是我们手动设计),但特殊情况下,如果你只能拿到数据库连接信息,也就是知道的一个数据库名的情况下,...

3744
来自专栏跟着阿笨一起玩NET

sql server根据表中数据生成insert语句

修正了表中的字段如果是SQL中的关键字(如Order)时,生成的脚本执行会出错的bug

471
来自专栏Java后端生活

MySQL(十五)DDL之常见的约束

1524
来自专栏极客慕白的成长之路

MySQL从安装到使用

Columns 列;Indexes 索引;Views 视图;Events 事件;Fields 字段;

624
来自专栏杨建荣的学习笔记

MySQL修改数据类型的问题总结(r10笔记第74天)

昨天快下班的时候,突然开发的同事找我说有个紧急需求,负责这个业务的DBA同事回家了,想让我帮忙看看,运行个SQL语句,几秒钟就好。我一听,就本着人道主义的精神留...

33310
来自专栏小白鼠

HIVE基础命令Sqoop导入导出插入表问题动态分区表创建HIVE表脚本筛选CSV中的非文件行GROUP BYSqoop导出到MySQL字段类型问题WHERE中的子查询CASE中的子查询

从一个表查数据插入到另一个表中,出现以下异常: 'STATUS' in insert schema specification is not found am...

2242
来自专栏左瞅瞅,右瞅瞅

SaltStack——小叙(远程执行)

想要返回结果返回mysql 库中,返回是salt-minion 返回,所有的salt-minion 需要安装Mysql-python 依赖包:

1824
来自专栏杨建荣的学习笔记

相同update语句在MySQL,Oracle的不同表现(r12笔记第30天)

今天有个朋友问我一个SQL问题,大体是一个update语句,看起来逻辑没有问题,但是执行的时候却总是报错。 语句和报错信息为: UPDATE paymen...

3527
来自专栏面朝大海春暖花开

sql

<select id="getListByWhere" parameterType="com.jiyun.beans.Employee" resultMap="...

822
来自专栏Grace development

举枪消灭”烂代码”的实战案例

之前我写过一篇如何少写PHP “烂”代码 https://blog.fastrun.cn/2018/06/13/1-9/ 感觉很多新人对此不太理解。今天以打卡...

523

扫码关注云+社区