当前位置: 首页 > news >正文

Mysql timestamp和datetime区别

文章目录

      • 一、存储范围和精度
      • 二、默认值和自动更新
      • 三、时区处理
      • 四、索引和性能
      • 五、存储空间和数据复制
      • 六、使用场景和注意事项
      • 七、时区转换

MySQL是一个常用的关系型数据库管理系统,其内置了多种数据类型用于存储和操作数据。其中,timestamp和datetime是两种常用的日期和时间类型,在实际应用中经常被使用。本文将从不同的角度分析二者的区别,并结合案例和代码进行比较说明。

一、存储范围和精度

  1. datetime:存储范围为’1000-01-01 00:00:00’到’9999-12-31 23:59:59’,默认精度为秒。
  2. timestamp:存储范围为’1970-01-01 00:00:01’到’2038-01-19 03:14:07’,默认精度为秒。

可以看出,datetime的存储范围和精度更大,能够表示更远的时间。

MySQL的timestamp类型的精确度是秒级。如果需要更高的精确度(比如毫秒或微秒),则需要使用datetime类型。datetime(3) 提供了毫秒级的精确度,而datetime(6) 提供了微秒级的精确度。

如果你在创建表时需要包含MySQL时间戳字段,并希望它具有毫秒级的精确度,你应该这样做:

CREATE TABLE example_table (id INT AUTO_INCREMENT PRIMARY KEY,description VARCHAR(255),created_at DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3)
);

在这个例子中,created_at字段定义为DATETIME(3)类型,这意味着它将存储毫秒级精度的时间戳。DEFAULT CURRENT_TIMESTAMP(3)设置了该字段的默认值为当前时间(包含毫秒精度)。

如果你需要微秒级精确度,你只需将3改为6

CREATE TABLE example_table (id INT AUTO_INCREMENT PRIMARY KEY,description VARCHAR(255),created_at DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6)
);

在这个示例中,created_at字段将存储微秒级精度的时间戳。

二、默认值和自动更新

  1. 默认值:

    • datetime:可以指定默认值,例如’2022-01-01 00:00:00’。
    • timestamp:如果未显式指定默认值或插入相应列时,将自动设置为当前时间。
  2. 自动更新:

    • datetime:不支持自动更新,需要手动更新。
    • timestamp:支持自动更新,可通过触发器或ON UPDATE CURRENT_TIMESTAMP选项实现。

例如,创建一张用户表,包含注册时间(datetime类型)和最后更新时间(timestamp类型)两个字段:

CREATE TABLE user (registration_time datetime DEFAULT '2022-01-01 00:00:00',last_update_time timestamp ON UPDATE CURRENT_TIMESTAMP
);

在插入用户数据时,可以看到注册时间是固定的,而最后更新时间会自动更新。

三、时区处理

  1. datetime:不存储时区信息,插入的时间值会被当做服务器的本地时间存储。
  2. timestamp:存储的是UTC时间,并在检索时会根据系统时间和时区设置转换成本地时间。

例如,设置MySQL服务器时区为UTC+8,插入当前时间:

INSERT INTO user (registration_time, last_update_time) VALUES (NOW(), NOW());

存储在datetime类型的字段中的时间会直接是服务器的本地时间;而存储在timestamp类型的字段中的时间会转换成UTC时间,并加上8个小时。

四、索引和性能

  1. datetime:在使用datetime作为索引列时,MySQL会对整个日期时间值进行索引,因此可以精确匹配。
  2. timestamp:在使用timestamp作为索引列时,MySQL只对其中的日期进行索引,忽略时间部分,因此只能匹配到日期相同的记录。

例如,创建一个用户订单表,包含订单时间(datetime类型)和支付时间(timestamp类型)两个字段,同时为这两个字段创建索引:

CREATE TABLE orders (order_time datetime,payment_time timestamp
);CREATE INDEX idx_order_time ON orders (order_time);
CREATE INDEX idx_payment_date ON orders (DATE(payment_time));

在此例中,通过查询订单时间可以使用datetime类型的索引,进行精确匹配;而通过支付时间只能使用日期部分进行索引匹配,忽略具体的时间,降低了查询的精确性。

五、存储空间和数据复制

  1. 存储空间:

    • TIMESTAMP类型使用4个字节的存储空间,存储范围为’1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC。
    • DATETIME类型使用8个字节的存储空间,存储范围为’1000-01-01 00:00:00’到’9999-12-31 23:59:59’。
  2. 数据复制:

    • TIMESTAMP值在数据传输过程中(如复制数据、远程备份等)会自动转换为UTC时间(全球标准时间),在目标系统上根据其时区设置转换为当地时间。这意味着,如果源系统和目标系统的时区设置不同,TIMESTAMP字段的值可能会发生变化。
    • DATETIME值在数据传输过程中保持不变,不考虑时区设置。这意味着,无论源系统和目标系统的时区设置如何,DATETIME字段的值都保持一致。

这些差异使得TIMESTAMP和DATETIME在不同的应用场景中各有优势。例如,如果希望在世界范围内统一处理时间(如在分布式系统中),可能会选择TIMESTAMP;如果希望保存历史事件的确切日期和时间,可能会选择DATETIME。

六、使用场景和注意事项

使用场景:

  • TIMESTAMP通常用于记录特定事件发生的具体时间,如用户注册时间,用户登陆时间等。
  • DATETIME通常用于记录未来的日期时间,或者需要保存年份比较大或者比较小的时间。

注意事项:

  • 使用TIMESTAMP时要注意它的时间范围,避免超出。
  • 基于TIMESTAMP的时区转换特性,如果你的应用运行在多个时区,而你又希望所有用户在查看同一时间字段时看到一样的值,那么应该使用DATETIME。
  • 为了获取准确的结果,最好在应用程序中处理日期和时间的运算,而不是依赖于SQL。
-- 创建一个名为example的数据库
CREATE DATABASE example;
USE example;-- 创建一个名为timetable的表,包含一个TIMESTAMP和一个DATETIME列
CREATE TABLE timetable (event_timestamp TIMESTAMP,event_datetime DATETIME
);-- 插入一条记录,使用当前时间作为值
INSERT INTO timetable (event_timestamp, event_datetime) VALUES (CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());-- 查询记录,观察输出结果
SELECT * FROM timetable;

这个例子演示了使用TIMESTAMP和DATETIME插入和查询数据。在插入一条记录时,TIMESTAMP和DATETIME列都使用了CURRENT_TIMESTAMP()函数来获取当前的时间。然后,通过查询SELECT * FROM timetable;来获取这条记录的所有列。

TIMESTAMP列在查询结果中可能显示的时间与插入时不完全相同,这是因为TIMESTAMP在存储时被转换为了当前时区的时间。换句话说,查询结果是当前时区的时间版本。而DATETIME列则会原样输出插入时的时间值,不受时区影响。

这个示例可以帮助您更好地理解TIMESTAMP和DATETIME在实际使用中的区别和行为差异。

七、时区转换

一个重要的区别在于时区处理。在应用中,我们经常需要处理不同时区的日期和时间,而timestamp和datetime在时区转换方面表现不同。

  1. datetime:datetime类型的值没有时区信息,它被视为服务器本地时间。如果我们在一个具有时区差异的环境中使用datetime值,可能会导致时区处理不准确。

  2. timestamp:timestamp类型存储的是UTC时间,但当我们从数据库中检索数据时,它会自动根据系统时区和连接会话时区进行转换成本地时间。

下面通过一个例子来说明这一点。假设有一个应用需要记录用户的登录时间,它支持国际化,用户分布在不同的时区。我们使用timestamp和datetime来存储登录时间。

CREATE TABLE user_login (user_id INT,login_time_datetime DATETIME,login_time_timestamp TIMESTAMP
);
  1. 使用datetime存储登录时间:
INSERT INTO user_login (user_id, login_time_datetime) VALUES (1, '2022-03-13 13:30:00');

当用户登录的时候,我们获取用户所在时区,并将登录时间转换为该时区的本地时间。

import pytz
from datetime import datetimeuser_timezone = pytz.timezone('Asia/Shanghai')
login_time = datetime(2022, 3, 13, 13, 30, 0, tzinfo=pytz.utc).astimezone(user_timezone)print(login_time)

在这个例子中,我们假设用户位于上海时区(Asia/Shanghai),将UTC时间转换为用户本地时间。但是,如果我们从数据库中检索登录时间并显示给用户时,可能会出现问题,因为登录时间没有时区信息,可能会被错误地解释为用户本地时间。

  1. 使用timestamp存储登录时间:
INSERT INTO user_login (user_id, login_time_timestamp) VALUES (1, '2022-03-13 13:30:00');

当用户登录的时候,我们直接将UTC时间存储在timestamp类型的字段中,不需要进行时区转换。

import pytz
from datetime import datetimeuser_timezone = pytz.timezone('Asia/Shanghai')
login_time = datetime(2022, 3, 13, 13, 30, 0, tzinfo=pytz.utc)print(login_time)

在这个例子中,我们同样假设用户位于上海时区,但是由于timestamp类型存储的是UTC时间,不需要进行时区转换。当我们从数据库中检索登录时间时,它会自动根据用户所在时区进行转换,并返回正确的登录时间。

通过这个例子,我们可以看到timestamp类型在处理时区转换方面的优势。在设计应用中涉及到跨时区的日期和时间存储时,timestamp类型是更可取的选择。

相关文章:

Mysql timestamp和datetime区别

文章目录 一、存储范围和精度二、默认值和自动更新三、时区处理四、索引和性能五、存储空间和数据复制六、使用场景和注意事项七、时区转换 MySQL是一个常用的关系型数据库管理系统,其内置了多种数据类型用于存储和操作数据。其中,timestamp和datetime是…...

新手村之SQL——分组与子查询

1.GROUP BY GROUP BY 函数就是 SQL 中用来实现分组的函数,其用于结合聚合函数,能根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。 mysql> SELECT country, COUNT(country) AS teacher_count-> FROM teacher…...

【hacker送书第9期】算法训练营(入门篇)

第9期图书推荐 内容简介作者简介精彩书评图书目录概述参与方式 内容简介 本书以海量图解的形式,详细讲解常用的数据结构与算法,又融入大量的竞赛实例和解题技巧。通过对本书的学习,读者可掌握12种初级数据结构、15种常用STL函数、10种二叉树和…...

微服务链路追踪组件SkyWalking实战

概述 微服务调用存在的问题 串联调用链路,快速定位问题;理清服务之间的依赖关系;微服务接口性能分析;业务流程调用处理顺序; 全链路追踪:对请求源头到底层服务的调用链路中间的所有环节进行监控。 链路…...

ubuntu 更换国内镜像

备份 cd /etc/aptcp sources.list sources.list.bakup修改源为清华源 sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g sources.list更新软件源 apt-get update其他源如下: mirrors.ustc.edu.cn 中科大 mirrors.163.com 163 mirrors.aliyun.com 阿里云...

树模型与深度模型对比

表格型数据为什么那么神奇,能让树模型在各种真实场景的表格数据中都战胜深度学习呢?作者认为有以下三种可能: 神经网络倾向于得到过于平滑的解冗余无信息的特征更容易影响神经网络 所以一定程度的特征交叉是不是必要的,因为one-ho…...

测试类运行失败:TestEngine with ID ‘junit-jupiter‘ failed to discover tests

背景:原本我的项目是可以运行的,然后我用另外一台电脑拉了下来,也是可以用的,但是很奇怪,用着用着就不能用了。报了以下错误: /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home/bin/java …...

nodejs使用node-cron实现定时任务功能

ChatGPT国内站点:海鲸AI 在Node.js中,node-cron是一个轻量级的任务调度库,它允许你根据类似于Cron的时间表来安排任务的执行。如果你想要每十分钟执行一次任务,你可以按照以下步骤来设置: 安装node-cron: 如…...

【1day】蓝凌OA 系统datajson.js接口远程命令执行漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞概述 二、影响版本 三、资产测绘 四、漏洞复现...

ABCDE类网络的划分及保留网段

根据IP地址的分类,IP地址被分为A、B、C、D和E五类。下面是对ABCDE类网络的划分及保留网段的详细描述: A类网络:范围从1.0.0.0到127.0.0.0,网络地址的最高位必须是“0”,可用的A类网络有127个,每个网络能容…...

营销系统规则引擎

一、系统介绍 规则引擎是一个用于执行营销规则的模块,其包括营销规则配置、规则校验等功能。规则引擎可以根据预先设定的条件和逻辑,自动化地执行特点的营销策略,帮助企业更好地吸引客户,增加销售和提高客户满意度。 规则引擎功能…...

【Linux】命令行参数

文章目录 前言一、C语言main函数的参数二、环境变量总结 前言 我们在Linux命令行输入命令的时候,一般都会跟上一些参数选项,比如l命令,ls -a -l。以前我总是觉得这是理所当然的,没深究其本质究竟是什么,今天才终于知道…...

【信息安全】-个人敏感信息、个人信息、个人金融信息

文章目录 个人敏感信息个人敏感信息判定举例 个人信息个人信息判定举例 个人金融信息内容a) 账户信息指账户及账户相关信息b) 鉴别信息c) 金融交易信息d) 个人身份信息e) 财产信息f) 借贷信息g) 其他信息: 出处 个人敏感信息 个人敏感信息判定 个人敏感信息是指一旦泄露、非法…...

海外服务器和国内服务器有什么样的区别呢

海外服务器和国内服务器有什么样的区别呢,其实呢在外形方面是大同小异,除了外形还有一些其他方面还存在这一些差异。 一,地理位置的差异。 海外服务器——有可能在中国数据中心之外的任何国家地区,例如美国服务器,韩…...

电脑屏幕亮度怎么调?学会4个方法,轻松调节亮度!

“我总是感觉我电脑屏幕太暗了,有时候如果光线好一点,会看不清电脑屏幕。有什么可以把电脑调亮一点的简单方法吗?” 在我们的日常生活中,电脑已经成为我们工作、学习、娱乐不可或缺的工具。然而,长时间面对电脑屏幕可能…...

微信小程序之猜数字和猜拳小游戏

目录 效果图 app.json 一、首页(index3)的代码 wxml代码 wxss代码 二、猜数字页面(index)代码 wxml代码 wxss代码 js代码 三.游戏规则页面(logs)代码 wxml代码 wxss代码 四.猜拳页面&#xff…...

CETN01 - How to Use Cloud Classroom

文章目录 I. Introduction to Cloud ClassroomII. How to Use Cloud Classroom1. Publish Resources2. Conduct Activities3. Class Teaching Reports4. View Experience Values5. Performance in Cloud Classroom I. 云课堂介绍II. 如何使用云课堂1. 发布资源2. 进行活动3. 班…...

安卓8预装可卸载应用

环境 系统:Android 8 CPU:MTK 理论上改法适用于其他平台,比如展讯。 不适用于安卓11。安卓11请参照android 11预装APP到data/app目录 实现 假设要内置test这个应用。 第一步把test添加到系统编译配置中,不同平台或cpu文件不一样。 比如&am…...

微服务实战系列之MemCache

前言 书接前文,马不停蹄,博主继续书写Cache的传奇和精彩。 Redis主要用于数据的分布式缓存,通过设置缓存集群,实现数据的快速响应,同时也解决了缓存一致性的困扰。 EhCache主要用于数据的本地缓存,因无法保…...

解决服务端渲染程序SSR运行时报错: ReferenceError: document is not defined

现象: 原因: 该错误表明在服务端渲染 (SSR) 过程中,有一些代码尝试在没有浏览器环境的情况下执行与浏览器相关的操作。这在服务端渲染期间是一个常见的问题,因为在服务端渲染期间是没有浏览器 API。 解决办法: 1. 修…...

【漏洞复现】狮子鱼任意文件上传漏洞

漏洞描述 狮子鱼CMS(Content Management System)是一种网站管理系统,旨在帮助用户更轻松地创建和管理网站。它具有用户友好的界面和丰富的功能,包括页面管理、博客、新闻、产品展示等。 狮子鱼CMS使用简单直观的管理界面,使得网站所有者可以方便地进行内容的发布、管理和…...

LINUX 下部署github仓库

打开tumx django-admin startproject project_name #创建django项目 project_name配置git ssh-keygen # 生成密钥 连接 github 在github中打开setting 添加密钥 并且允许 write access git init # 把当前文件夹配置为git仓库 git config --global user.name xxx git config --g…...

CentOS中安装数据库

1.下载 网址:https://dev.mysql.com/downloads/mysql/ 按如图选择,然后点击Download 这里它让我们登录,我们直接选择不登录,直接下载 2.关闭防火墙 systemctl disable firewalld3.正式安装 切换到/usr/local下 cd /usr/l…...

GPT-Crawler一键爬虫构建GPTs知识库

GPT-Crawler一键爬虫构建GPTs知识库 写在最前面安装node.js安装GPT-Crawler启动爬虫结合 OpenAI自定义 assistant自定义 GPTs(笔者用的这个) 总结 写在最前面 GPT-Crawler一键爬虫构建GPTs知识库 能够爬取网站数据,构建GPTs的知识库&#xf…...

在微信小程序中如何改变默认打开的页面

在微信小程序中,在我们编写页面的时候,可能会在重新渲染的时候导致页面跳转到默认打开的页面上,为了提升用户的一个体验,我们可以设置一些内容来修改小程序默认打开的页面,提升开发者的开发体验。 当我们打开一个微信…...

Ardupilot开源飞控之VTOL之旅:配件试装

Ardupilot开源飞控之VTOL之旅:配件试装 1. 源由2. 分析2.1 【修改使用】FC & PDB & GPS打印件2.2 【直接使用】VTX & CRSF打印件 3. 试装3.1 【结构】问题1:GPS座子尺寸非常紧凑,需要用力压入卡座内。3.2 【结构】问题2&#xff…...

STM32-GPIO

一、GPIO简介 GPIO(General Purpose Input Output)通用输入输出口 可配置8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V 输出模式下:可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输…...

MySQL的事务

<!DOCTYPE html> <html> <head> <meta charset"UTF-8" /> <title>MySQL的事务</title> </head> <body> <!-- 事务是一组操作的集合&#xff0c;它是一个不可分隔的工作单位&#xff0c;事务会把所有的操作作…...

go-carbon v2.2.14 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库

carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库&#xff0c;支持链式调用。 目前已被 awesome-go 收录&#xff0c;如果您觉得不错&#xff0c;请给个 star 吧 github.com/golang-module/carbon gitee.com/golang-module/carbon 安装使用 Golang 版本大于…...

解决 IIS HTTP 403 错误问题

最近上传附件 IIS 总是返回 HTTP 403 错误,在踩了很多配置的坑之后,终于把问题解决了,于是特意写了本篇文章。 虽然网络上的文章不少,大都写的没错,但是他们没有很清晰的把问题描述清楚,导致一些新手在看这些文章跟着处理问题的时候难免会踩坑,于是我就以我踩坑的经验写…...

沧州市做网站价格/2023年的新闻十条

声明&#xff1a;本文引用吴恩达教授的DeepLearning课程内容。 滑动窗口法的卷积实现虽然效率更高&#xff0c;但仍然存在问题&#xff0c;不能输出最精准的边界框。因为滑动窗口法中&#xff0c;取这些离散的位置集合并不能完全匹配目标大小、位置。 其中一个能得到更精准边界…...

广州网站建设培训/游戏优化软件

atitit 商业项目常用模块技术知识点 v3 qc29 条码二维码barcodebarcode 条码二维码qrcodeqrcode 条码二维码dm码生成与识别 条码二维码pdf147码 条码二维码zxing 条码二维码azetec 条码二维码maxicode 自动完成 翻页page 公告管理 小元宵活动刮刮卡 小元宵活动闸金蛋 小元宵活动…...

台州网站设计公司/宁波seo入门教程

2.标识项目的基础设施 2.1确立项目和战略策划之间的关系 1.外部环境分析 随着全球经济发展与人民生活水平的提高&#xff0c;游戏已成为人们不可或缺的主要娱乐部分。据360游戏2015年度报告&#xff0c;RPG游戏逐渐征服市场&#xff0c;呈现超越卡牌类游戏并取代其第一的位置 2…...

设计公司名字创意/上海优化seo

区块链技术被誉为第四次工业革命代表性成果之一&#xff0c;“最有潜力触发第五轮颠覆性革命浪潮的核心技术”&#xff0c;代表着互联网的未来&#xff0c;具有划时代意义。它被认为是与1975年的个人计算机、1993年的因特网同样具有革命性的信息技术突破。 日前&#xff0c;全…...

游戏咨询网站建设目标是什么/百度竞价推广是什么

在*NIX系统遭受***后&#xff0c;确定损失及***者的***源地址相当重要。虽然在大多数***者懂得使用曾被他们攻陷的机器作为跳板来***你的服务器可在他们发动正式***前所做的目标信息收集工作&#xff08;试探性扫描&#xff09;常常是从他们的工作机开始的&#xff0c;本篇介绍…...

网站设计怎么学/球队排名榜实时排名

一、方案一 使用一个可滑动的组件ScroolView包裹用于在内容超过显示区域后可滑动的布局。限制一个固定高度即可实现 <ScrollViewandroid:layout_width"match_parent"android:layout_height"match_parent"><LinearLayoutandroid:layout_width&qu…...