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 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

基于案例理解MySQL执行计划

版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处。

10620
来自专栏magicsoar

Mysql Innodb 锁机制 select * from table where?insert?delete?update?3个insert的死锁2个update的死锁3个以上delete的死

latch与lock latch 可以认为是应用程序中的锁,可以称为闩锁(轻量级的锁) 因为其要求锁定的时间必须要非常短,若持续时间长,则会导致应用性能非常差,...

35080
来自专栏代码世界

PyMySQL模块的使用

PyMySQL介绍   PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,Python2系列中则使用mysqldb。Django中也可...

37670
来自专栏蜉蝣禅修之道

Mysql学习笔记(一)创建触发器

36510
来自专栏battcn

MySQL - 常见的三种存储引擎

数据库存储引擎: 是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水...

9110
来自专栏MYSQL轻松学

MYSQL RR隔离级别下MVCC及锁解读

MVCC(Multi-Version Concurrent Control):多版本并发控制,只作用于RC和RR隔离级别,主要是为了避免脏读、非重复读,而非幻读...

56580
来自专栏java达人

MySQL 加锁处理分析

背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信...

32350
来自专栏散尽浮华

mysql操作命令梳理(4)-中文乱码问题

在平时的mysql运维操作中,经常会碰到插入中文字段后出现乱码的情况,产生中文乱码的原因一般有: 1)mysql的编码格式不对,是latin1编码。强烈推荐将m...

22880
来自专栏Albert陈凯

SQL语句各个部分执行顺序

http://www.tuicool.com/articles/fERNv2 下面先给出上面的SQL语句的执行顺序,然后进行讲解: (8)  select (...

34170
来自专栏Java帮帮-微信公众号-技术文章全总结

【数据库】MySQL进阶二、索引简易教程

【数据库】MySQL进阶二、索引简易教程 Mysql索引简易教程 基本概念 索引是指把你设置为索引的字段A的内容储存在一个独立区间S里,里面只...

36790

扫码关注云+社区

领取腾讯云代金券