mysql提供了表示日期和时间的数据类型_MySQL数据类型 - 日期和时间类型(1)

1.日期和时间数据类型语法

用于表示时间值的日期和时间数据类型是DATE, TIME, DATETIME, TIMESTAMP和 YEAR。

对于TIME, DATETIME和 TIMESTAMP值,MySQL支持小数秒,精度可达微秒(6位数)。要定义包含小数秒部分的列,请使用语法type_name(fsp),其中type_name是TIME、DATETIME或TIMESTAMP,fsp是小数秒精度。例如:

4c7743835733577da7696c39bf6005d8.png

fsp值(如果给定)必须在0到6的范围内。值为0表示不存在小数部分。如果省略,则默认精度为0。(这与标准的SQL默认值6不同,是为了与以前的MySQL版本兼容。)

表中的任何TIMESTAMP或DATETIME列都可以自动初始化和更新:

●DATE

日期值,支持的范围是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式显示DATE值,但允许使用字符串或数字将值分配给DATE列。

●DATETIME[(fsp)]

日期和时间的组合。支持的范围是'1000-01-01 00:00:00.000000'到'9999-12-31 23:59:59.999999'。MySQL以'YYYY-MM-DD hh:MM:ss[.fraction]'格式显示DATETIME值,但允许使用字符串或数字将值分配给DATETIME列。

可以给出0到6范围内的可选fsp值,以指定小数秒精度。值为0表示不存在小数部分。如果省略,则默认精度为0。

可以使用列定义子句DEFAULT为DATETIME列自动初始化到当前日期和时间,使用列定义子句ON UPDATE为DATETIME列更新到当前日期和时间。

●TIMESTAMP[(fsp)]

时间戳。范围是'1970-01-01 00:00:01.000000' UTC到'2038-01-19 03:14:07.999999' UTC。TIMESTAMP值存储为自'1970-01-01 00:00:00' UTC以来的秒数。它不能表示值'1970-01-01 00:00:00',因为这相当于0秒,而值0保留为表示'0000-00-00 00:00:00',TIMESTAMP的零值。

可以给出0到6范围内的可选fsp值,以指定小数秒精度。值为0表示不存在小数部分。如果省略,则默认精度为0。

服务器处理TIMESTAMP定义的方式取决于explicit_defaults_for_timestamp系统变量值。

如果启用了explicit_defaults_for_timestamp,则不会自动将DEFAULT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP属性分配给任何TIMESTAMP列。它们必须显式地包含在列定义中。此外,任何未显式声明为NOT NULL的TIMESTAMP都允许空值。

如果禁用explicit_defaults_for_timestamp,服务器将按如下方式处理TIMESTAMP:

除非另有指定,否则表中的第一个TIMESTAMP列定义为,如果未显式分配值,则自动设置为最近修改的日期和时间。这使得TIMESTAMP对于记录INSERT或UPDATE操作的时间戳非常有用。

如果TIMESTAMP列没有被定义为NULL,为它分配NULL值就相当于分配了当前日期和时间。

可以使用DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP列定义子句自动初始化或更新到当前日期和时间。默认情况下,如前所述,第一个TIMESTAMP列具有这些属性。但是,表中的任何TIMESTAMP列都可以定义为具有这些属性。

●TIME[(fsp)]

时间。范围是'-838:59:59.000000'到'838:59:59.000000'。MySQL以'hh:mm:ss[.fraction]'格式显示TIME值,但允许使用字符串或数字将值分配给TIME列。

可以给出0到6范围内的可选fsp值,以指定小数秒精度。值为0表示不存在小数部分。如果省略,则默认精度为0。

●YEAR[(4)]

四位数格式的年。MySQL以YYYY格式显示YEAR值,但允许使用字符串或数字将值分配给YEAR列。值显示范围从1901到2155,或者0000。

SUM()和AVG()聚合函数不能处理时间值。(它们将值转换为数字,将丢弃第一个非数字字符之后所有内容。)若要解决此问题,请转换为数字单位,执行聚合操作,然后转换回时间值。示例:

67c06662ee1fc5f9c854eb13706d7c9d.png

2.DATE、 DATETIME 和 TIMESTAMP类型

DATE、DATETIME 和 TIMESTAMP类型是相关的。本节介绍了它们的特点、相似之处和不同之处。MySQL可以识别多种格式的DATE、DATETIME和TIMESTAMP 值。

DATE类型用于具有日期但没有时间部分的值。MySQL以'YYYY-MM-DD'格式检索并显示DATE值。支持的范围是'1000-01-01'到'9999-12-31'。

DATETIME类型用于同时包含日期和时间部分的值。MySQL以'YYYY-MM-DD hh:MM:ss'格式检索并显示DATETIME值。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。

TIMESTAMP数据类型用于包含日期和时间部分的值。TIMESTAMP的范围是'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC。

DATETIME或TIMESTAMP值可以包含小数秒部分,最高达微秒(6位)精度。特别是,插入DATETIME或TIMESTAMP列中的任何小数部分都将被存储而不是丢弃。包含小数部分时,这些值的格式为'YYYY-MM-DD hh:MM:ss[.fraction]',DATETIME值的范围为'1000-01-01 00:00:00.000000'到'9999-12-31 23:59:59.999999',TIMESTAMP值的范围为'1970-01-01 00:00:01.000000'到'2038-01-19 03:14:07.999999'。小数部分应始终与其余时间用小数点分隔;不能用其他小数秒分隔符。

MySQL存储时将TIMESTAMP值从当前时区转换为UTC,检索时从UTC转换为当前时区。(其他类型(如DATETIME)不会发生这种情况。)默认情况下,每个连接的当前时区是服务器的时间。时区可以根据每个连接进行设置。只要时区设置保持不变,就可以得到存储的相同值。如果存储TIMESTAMP值,然后更改时区并检索该值,则检索到的值与存储的值不同。发生这种情况的原因是没有使用同一时区在两个方向上进行转换。可以从系统变量 time_zone 中得到当前时区。

从MySQL 8.0.19开始,在向表中插入TIMESTAMP和DATETIME值时,可以指定时区偏移量。偏移量被附加到日期时间后面(原文可能有误,具体参加最下方原始文档),不包含空格,并使用与设置 time_zone 系统变量相同的格式,但有以下例外情况:

●对于小于10的小时值,需要加前导零。

●不允许'-00:00'值。

●不能使用'EET'和'Asia/Shanghai'等时区名称;也不能使用'SYSTEM'。

此示例演示如何使用不同的时区设置将带有时区偏移的日期时间值插入TIMESTAMP和DATETIME列,然后检索它们:

7ae7dae0791bf4f44dabd24352fc468f.png

e763e887e6810a669b2ea80d1141d042.png

查询结果中日期时间值不显示偏移量,即使在插入时使用了偏移量。

支持的偏移量范围为-14:00到+14:00(含)。

包含时区偏移量的日期时间字面值作为整体的参数值传入语句。

如果SQL模式允许,则无效的DATE、DATETIME和TIMESTAMP值将转换为对应类型的"零"值('0000-00-00'或'0000-00-00 00:00')。具体行为取决于是否启用了严格SQL模式或NO_ZERO_DATE SQL模式。

MySQL中日期值特定属性释义:

●MySQL允许对指定为字符串的值使用"宽松"格式,其中任何标点字符都可以用作日期部分或时间部分之间的分隔符。在某些情况下,这种语法可能具有欺骗性。例如,'10:11:12'这样的值因为 : 可能看起来像时间值,但如果在日期上下文中使用,则会被解释为'2010-11-12'。值'10:45:15'转换为'0000-00-00',因为'45'不是有效的月份。

日期和时间部分与小数秒部分之间唯一可识别的分隔符是小数点。

●服务器要求月和日的值是有效的,而不仅仅是分别在1到12和1到31之间。禁用严格模式时,无效日期(如'2004-04-31')将转换为'0000-00-00',并生成警告。启用严格模式时,无效日期将引发错误。若要允许此类日期,请启用 ALLOW_INVALID_DATES。

●MySQL不接受在日或月值是0的TIMESTAMP值或不是有效日期的值。如果SQL模式允许,则此规则的唯一例外是特殊的零值'0000-00-00 00:00:00'。具体的行为取决于是否启用了严格SQL模式和NO_ZERO_DATE SQL模式。

●包含两位数年份的日期值不明确,因为世纪值未知。MySQL使用以下规则解释2位数的年份值:

① 70-99之间的年份值将变为1970-1999。

② 00-69之间的年份值将变为2000-2069。

3.TIME 类型

MySQL以'hh:mm:ss'格式检索和显示TIME值(小时值数字大时用'hhh:mm:ss'格式)。TIME值的范围从'-838:59:59'到'838:59:59'。小时值可能很大,因为时间类型不仅可以用来表示一天中的某个时间(必须小于24小时),还可以表示经过的时间或两个事件的时间间隔(可能远远大于24小时,甚至为负)。

MySQL可以识别多种格式的TIME值,其中一些格式可以包含最高达微秒(6位)精度的小数秒部分。特别是,插入TIME列的值中的任何小数部分都将被存储而不是丢弃。包含小数部分时,TIME值的范围为'-838:59:59.000000'到'838:59:59.000000'。

将缩写值分配给TIME列时请务必当心。MySQL将带有冒号的缩写TIME值解释为一天中的时间。例如,'11:12'是指'11:12:00',而不是'00:11:12'。如果缩写值不含冒号,MySQL使用最右边的两个数字表示秒(即,这个时间是一段时间而不是一天中的某个时间)。例如,您可能认为'1112'和1112表示'11:12:00'(11点12分钟),但MySQL将其解释为'00:11:12'(11分钟12秒)。类似地,'12'和12被解释为'00:00:12'。

时间部分和小数秒部分之间唯一可识别的分隔符是小数点。

默认情况下,位于TIME范围之外但在其他情况下有效的值将被剪裁到范围的最近端点。例如,'-850:00:00'和'850:00:00'转换为'-838:59:59'和'838:59:59'。无效的TIME值转换为'00:00:00'。请注意,由于'00:00:00'本身是一个有效的TIME值,因此无法从存储在表中的'00:00:00'值判断原始值是指定为'00:00:00'还是一个无效值。

4.YEAR 类型

YEAR类型是一个1字节数据类型,用于表示年份值。它可以声明为隐式显示宽度为4个字符的年份,也可以显式声明显示宽度YEAR(4),和隐式声明效果是等同的。

从MySQL 8.0.19开始,不推荐使用具有显式显示宽度的YEAR(4)数据类型,并且在以后的MySQL版本中将删除对它的支持。请使用不带显示宽度的年份,其含义相同。

MySQL 8.0不支持旧版本MySQL中允许的2位数YEAR(2)数据类型。

MySQL以YYYY格式显示YEAR值,范围是1901到2155和0000。

YEAR接受多种格式的输入值:

●'1901'到'2155'范围内的4位字符串。

●1901到2155范围内的4位数字。

●'0'到'99'范围内的1位或2位字符串。MySQL将范围'0'到'69'和'70'到'99'的值分别转换为2000到2069和1970到1999之间的YEAR值。

●0到99范围内的1位或2位数字。MySQL将范围为1到69、70到99的值分别转换为范围为2001到2069和1970到1999的YEAR值。

插入数字0的结果的显示值为0000,内部值为0000。若要插入零并将其解释为2000,请将其指定为字符串'0'或'00'。

●YEAR可接受的函数返回结果,例如NOW()。

如果没有启用严格的SQL模式,MySQL会将无效的YEAR值转换为0000。在严格的SQL模式下,尝试插入无效的YEAR值会引发错误。

文章来源: blog.51cto.com,作者:数据杂货铺,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.51cto.com/15023289/2561177

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件质量保证计划_CMMI V2.0 精讲之“过程质量保证”

过程质量保证(PROCESS QUALITY ASSURANCE, PQA)目的:验证并改进已执行的过程和所产生的工作产品的质量。价值:增强过程使用和改进的一致性,以最大限度地提高业务效益和客户满意度。实践概述第1级PQA 1.1识别并解决过程和工作产品问题。第2级P…

mysql gzip_在mysql中存储GZIP:ed文本?

Is it a common thing for bigger applications and databases to GZIP text data before inserting it to the database?Ill guess that any full-text search on the actual text field will not be working before unzipping it again?解决方案Ive not seen this done muc…

html 分页_JQuery堪称完美的分页函数

演示效果&#xff1a;html部分&#xff08;引入jquery.js&#xff09;<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>jQuery简单的分页插件</title> </head><link rel"stylesheet" href"…

mysql 8.0.12解压版安装教程_mysql 8.0.12 解压版安装教程

本文为大家分享了mysql 8.0.12 解压版安装教程&#xff0c;供大家参考&#xff0c;具体内容如下1、首先在官网上下载mysql8.0.12的压缩包&#xff1a;下载地址2、下载成功后解压到任意目录&#xff0c;比如我的是E:\download\mysql-8.0.12-winx64&#xff1b;3、配置环境变量&a…

简洁又快速地处理集合——Java8 Stream(下)

上一篇文章我讲解 Stream 流的基本原理&#xff0c;以及它与集合的区别关系&#xff0c;讲了那么多抽象的&#xff0c;本篇文章我们开始实战&#xff0c;讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集合——Java8 Stream&#xf…

python入口函数的作用_python之函数中参数的作用域

学编程究竟学的是什么呢&#xff1f;在写文章的这几天也一直在思考这个问题——恐怕这也是接下来的几年一直会去思考的问题。这个问题的答案也会指导我的方法论&#xff0c;所以索性整顿一下。 现阶段我的回答是&#xff0c;发现需求&#xff0c;然后解决。 最大的需求无非是完…

idea lombok 离线安装_Lombok与IntelliJ IDEA干了一架,完胜

我相信前段时间&#xff0c;有更新IDEA到2020.2版本的同学&#xff0c;在安装Lombok的过程中&#xff0c;肯定遇到与Lombok无法兼容的问题&#xff0c;并且报错&#xff1a;Caused by: com.intellij.psi.PsiInvalidElementAccessException: Element: class de.plushnikov.intel…

jquery设置宽_JavaScript学习笔记(三十二) jQuery(中)

jQuery昨天讲了 jQuery 的基本选择器筛选器和属性操作今天来说一些 jQuery 别的东西元素操作创建一个元素var div $()内部插入元素// 向 div 元素中插入一个 p 元素&#xff0c;放在最后$(div).append($())// 把 p 元素插入到 div 中去&#xff0c;放在最后$(hello).appendTo(…

python自动化框架测试实操_自动化框架之 python+selenium+pytest

1.概述 selenium&#xff1a; 基于JavaScript代码库的自动化测试框架&#xff0c;通过脚本语言&#xff0c;模拟用户行为操作&#xff0c;最接近用户真实场景&#xff0c;实现对web自动测试。 Selenium&#xff0c;是目前的最火爆企业最主流的webUI自动化框架 pytest: pytest是…

mysql 关联查询慢_mysql慢查询语句分析总结

我们经常会接触到MySQL&#xff0c;也经常会遇到一些MySQL的性能问题。我们可以借助慢查询日志和explain命令初步分析出SQL语句存在的性能问题通过SHOW FULL PROCESSLIST查看问题SHOW FULL PROCESSLIST相当于select * from information_schema.processlist可以列出正在运行的连…

python opencv3 轮廓检测

git&#xff1a;https://github.com/linyi0604/Computer-Vision 1 # coding:utf82 3 import cv24 import numpy as np5 6 # 创建一个200*200 的黑色空白图像7 img np.zeros((200, 200), dtypenp.uint8)8 # 在图像的中央位置 放置一个100*100的白色方块9 img[50:150, 50: 150] …

CentOS7搭建NTP服务器

搭建ntp服务器 查看服务器、客户端操作系统版本 2查看服务器是否安装ntp 3如果没有安装 4安装完成后重新查看服务器是否安装ntp 5查看ntp服务器状态 6修改配置文件 注释 #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.p…

mysql 5.7.21-linux_MySQL 5.7.21 Linux平台安装 Part 2

从今天开始MySQL相关方面的东西今天是关于MySQL的安装系统为 redhat 6.10数据库为MySQL 5.7.21PS:目前最新版本为MySQL 5.7.251. 目录规划2. MySQL 5.7 下载目前MySQL 社区的GA 提供5 和8 的下载由于目前大多数系统用的还是5的版本这里统一使用5的版本注意&#xff0c;下面是按…

session很快失效_深夜,我偷听到程序员要对session下手...

我是一个web服务器我的工作是给人类提供上网服务&#xff0c;我每天要为数以万计的人提供网页浏览服务。已经是深夜了&#xff0c;我还在和手下几个兄弟为了一件事紧张讨论着。“老大&#xff0c;现在咱们每天处理的请求越来越多了&#xff0c;session同步的问题不能再拖了&…

centos7安装samba服务器

1查看是否安装samba服务 2如果为空则没有安装&#xff0c;安装显示安装完成即成功 3查看samba状态 4查看配置文件的位置 5配置文件备份&#xff0c;直接传输到本地备份 6修改配置文件 Path共享目录位置 Valid users 可以查看的用户 Browseable可以查看共享文件夹的目录&a…

微信小程序—day01

前言 听说谷歌准备回中国了&#xff0c;玩了一下谷歌刚入驻微信的小程序&#xff1a;“猜画小歌”&#xff0c;又一次见识到了ai的强大魅力。看来python之路&#xff0c;前途还是一片光明的。 因为18年初时的“跳一跳”&#xff0c;带火了微信小程序&#xff0c;一直想要写一个…

docker mysql 操作_[Docker] Docker 快速搭建本地MySQL开发环境

[Docker] Docker 快速搭建本地MySQL开发环境关于 Docker 的安装使用本文不再赘述&#xff0c;有兴趣的可以通过官网或是浏览我的专栏文章了解。今天着重给大家介绍下如何利用Docker快速搭建一个MySQL的环境&#xff0c;来协助本地开发。TOC手机用户请横屏获取最佳阅读体验&…

centos7安装DHCP服务器

1检查防火墙和selinux&#xff08;关闭&#xff09; 关闭防火墙和selinux&#xff0c;这边不多说 2检查DHCP状态 3安装DHCP软件包 4把系统默认的样例复制 5修改配置文件 option domain-name “example.org”; --DNS域名 option domain-name-servers ns1.example.org, ns2.…

python装饰器解析_Python 装饰器解析

一、装饰器定义&#xff1a;本质是函数&#xff0c;&#xff08;装饰其他函数&#xff09;就是为其他函数添加附加功能 二、装饰器的作用&#xff1a;在不改变原函数的情况下&#xff0c;为原函数前后添加新的功能 三、装饰器的原则&#xff1a; 1、不能修改被装饰的函数的源代…

centos7网卡识别不到,无法远程工具连接

这是在安装dhcp的时候遇到的问题&#xff0c;远程工具连接不上了。没IP地址没得玩 解决办法 直接在虚拟机打开终端&#xff0c;找到配置文件ifcfg-ens33 TYPE“Ethernet” PROXY_METHOD“none” BROWSER_ONLY“static”----原先的dhcp换成static BOOTPROTO“no” DEFROUTE“ye…