首页 > 数据库 >如何避免Mysql的timestamp的大坑

如何避免Mysql的timestamp的大坑

时间:2023-11-07 11:45:44浏览次数:36  
标签:00 大坑 timestamp datetime 未指定 时间 Mysql 类型

如何避免Mysql的timestamp的大坑

Mysql的timestamp类型讨论

需要测试MYSQL的同学,可以点以下链接免费试用腾讯云mysql服务器

https://curl.qcloud.com/tgnMO3KJ

一.时间戳字段定义

timestamp时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起到现在的总秒数。

在MySQL 5.6.4及之后版本,可以将时间戳类型数据精确到微秒,数据类型定义为timestamp(N),N取值范围为0-6,默认为0,如需要精确到毫秒则设置为Timestamp(3),如需要精确到微秒则设置为timestamp(6),数据精度提取的代价是其内部存储空间的变化,但仍未改变时间戳类型的最大和最小取值范围。

时间戳字段定义主要影响两类操作:

1. 插入记录时,时间戳字段包含DEFAULT CURRENT_TIMESTAMP,如插入记录时未指定具体时间数据则将该时间戳字段值设置为当前时间。

2. 更新记录时,时间戳字段包含ON UPDATE CURRENT_TIMESTAMP,如更新记录时未指定具体时间数据则将该时间戳字段值设置为当前时间。

时间戳列可以有四张组合定义,其含义分别为:

1.当字段定义为timestamp,该字段在插入和更新时都不会自动设置为当前时间。

2. 当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP,该字段仅在插入且未指定值时被赋予当前时间,再更新时且未指定值时不做修改。

3. 当字段定义为timestamp ON UPDATE CURRENT_TIMESTAMP,该字段在插入且未指定值时被赋值为"0000-00-00 00:00:00",在更新且未指定值时更新为当前时间。

4. 当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,该字段在插入或更新时未指定值,则被赋值为当前时间。

二.Timestamp与datetime的区别

两者都可用来表示YYYY-MM-DD HH:MM:SS[.fraction]类型的日期,但timestamp没有时区问题,而datetime有时区问题,原因是timestamp在存储上是包含时区的,以UTC格式存储的,而datetime存储类似于时间字符串的形式,是不包含时区的。也就是说mysql数据库如果设置的时区改变,timestamp类型会随时区改变而改变,datetime类型则不变。也就是说timestamp包含时区,而datetime不包含。

三.时间戳类型和时间类型选择

在部分数据库指导文档中,会推荐使timestamp类型代替datetime字段,其理由是timestamp类型使用4字节,而datetime字段使用8字节,但随着磁盘性能提升和内存成本降低,在实际生产环境中,使用timestamp类型并不会带来太多性能提升,反而可能因timestamp类型的定义和取值范围限制和影响业务使用,例如2038问题。

在MySQL 5.6.4及之后版本,可以将时间戳类型(timestamp)数据精确到微秒,也同样可以将时间类型(datetime)数据精确到微秒,

时间类型(datetime)同样可以获得timestamp类型相同的效果。

因此,在不考虑时区改变的情况,可以将timestamp类型更改为

Datetime类型。

四、对业务的影响

查询mysql 8.0官网得知,更改数据类型操作,不能进行在线操作,意味着会锁表。

云数据库MySQL基础版1元体验,赶紧试一下吧
https://cloud.tencent.com/act/cps/redirect?redirect=1034&cps_key=f8836edc82539e6bb883302a88a6bba9&from=console

举报/反馈 原文链接:https://baijiahao.baidu.com/s?id=1737209045225760460&wfr=spider&for=pc

标签:00,大坑,timestamp,datetime,未指定,时间,Mysql,类型
From: https://www.cnblogs.com/sunny3158/p/17814669.html

相关文章

  • linux版本mysql安装
    linux版本mysql安装1先检查有没有安装mariadb,有的话将其卸载,不然会和mysql冲突。yumlist|grepmariadbmariadb-libs.x86_641:[email protected]_641:5.5.68-1.el7basem......
  • 《MySQL》复习必刷知识点
    1.数据库SQL语言的缩写DDL:数据定义语言DataDefinitionLanguage,定义语言就是定义关系模式、删除关系、修改关系模式以及创建数据库中的各种对象,比如表、聚簇、索引、视图、函数、存储过程和触发器关键字包括:Create,Alter,Drop,TruncateDML:数据操纵语言全称是DataManipulationLa......
  • MYSQL 表空间恢复
    MYSQL表空间恢复由于ibdata1文件小心被删除,数据库数据看到具体思路,重建数据,移动出问题的数据上的idb文件进行恢复。前提表没有问题,必须要有原始的建表语句,由于mysql的自带数据没有问题,就不需要进行恢复原始建库建表语句(只要表结构)可以从其他节点复制过来(如mysqlslave节......
  • Mysql一些操作笔记
    1.如何在MySQL中表的时间格式字段加上指定天数?UPDATE表名SETdate1=date1+interval4dayWHERE条件;其中,4表示需要增加的天数,条件是MySQL的where子句,根据实际的表结构,生成适当的筛选条件。此外,也可以使用date_add函数在MySQL中添加指定天数,比如,要增加6天:UPDAT......
  • mysql binlog常用脚本(解析与反解析)
     解析binlog方法1:mysqlbinlogmysqlbinlog--no-defaults--base64-output=decode-rows-vv--database=dboop--start-datetime='2020-10-1100:00:00'--stop-datetime='2020-10-1115:00:00'mysql-bin.000075>75.sql 常用参数database:只列......
  • 如何解决MySQL主从复制延时问题
    MySQL主从复制是面试中不可避开的重要一环,里面的知识点虽然基础,但是能回答全的同学不多,今天我们再来老生常谈一下。本文全文内容如下。  1.MySQL主从1.1什么是MySQL主从?MySQL主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL......
  • mysql blob和text的区别
    一:主要区别TEXT与BLOB的主要差别就是BLOB保存二进制数据,TEXT保存字符数据。目前几乎所有博客内容里的图片都不是以二进制存储在数据库的,而是把图片上传到服务器然后正文里使用标签引用,这样的博客就可以使用TEXT类型。而BLOB就可以把图片换算成二进制保存到数据库中。二、类型区......
  • [翻译]——How the MySQL Optimizer Calculates the Cost of a Query (Doc ID 1327497
    本文是对这篇文章HowtheMySQLOptimizerCalculatestheCostofaQuery(DocID1327497.1)的翻译,翻译如有不当的地方,敬请谅解,请尊重原创和翻译劳动成果,转载的时候请注明出处。谢谢!适用于:MySQL4.0及后续更高的版本本文档中的内容适用于任何平台。目标了解MySQL优化......
  • Debug - MySQL - Err 1062 duplicate entry xxxx for key xxx
    可能原因1脏数据存在 可能原因2当你手动刷sql修改表结构时,可能这张表正有写库操作。一边写库一边修改表结构,就会出现这种错误。。。原因未知,猜测和锁表有关系 两次错误提示:详细的数据是不一样的....而且日期是今天的,说明不是脏数据  等待写库程序结束,再刷表就没......
  • mysql 使用ON DUPLICATE KEY update实现插入或更新操作
    创建一个表CREATETABLE`userinfo`(`UserID`int(11)NOTNULL,`UserName`varchar(45)CHARACTERSETutf8COLLATEutf8_general_ciDEFAULTNULL,PRIMARYKEY(`UserID`))ENGINE=InnoDBDEFAULTCHARSET=utf8;想要实现,没有数据插入新数据,有数据更新数据首先......