Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 478|回复: 0

mysql解决datetime与timestamp精确到毫秒的问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-26 11:58:56 | 显示全部楼层 |阅读模式

    CREATE TABLE `tab1` (
    `tab1_id` VARCHAR(11) DEFAULT NULL,
    `create` TIMESTAMP(3) NULL DEFAULT NULL,
    `create2` DATETIME(3) DEFAULT NULL
    ) ENGINE=INNODB DEFAULT CHARSET=utf8

    SELECT * FROM tab1;

     

    TIMESTAMP(3)与 DATETIME(3)意思是保留3位毫秒数

    TIMESTAMP(6)与 DATETIME(6)意思是保留6位毫秒数

     

    修改已存在的表字段示例:ALTER TABLE tb_financial MODIFY CREATE_TIME DATETIME(3) DEFAULT NULL COMMENT '录入时间';

     

     

     

     插入日期可以用NOW(3)来控制精确的毫秒数,SELECT CURRENT_TIMESTAMP(3);也是可以的

    http://www.cnblogs.com/shihaiming/p/5853595.html

     

     

    DEFAULT values in MySQL must be constants. They can't be functions or expressions (with the exception of CURRENT_TIMESTAMP).

    Source: http://dev.mysql.com/doc/refman/5.6/en/data-type-defaults.html
    http://stackoverflow.com/questions/27601482/add-date-time-as-default-value

    DATETIME类型用在你需要同时包含日期和时间信息的值时。MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。(“支持”意味着尽管更早的值可能工作,但不能保证他们可以。)

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

    TIMESTAMP列类型提供一种类型,你可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。

    TIME数据类型表示一天中的时间。MySQL检索并且以"HH:MM:SS"格式显示TIME值。支持的范围是'00:00:00'到'23:59:59'

    CREATE TABLE `tb_test` (  
      `id` int(11NOT NULL AUTO_INCREMENT,  
      `date1` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIM  
    ESTAMP,  
      `date2` date DEFAULT NULL,  
      `date3` datetime DEFAULT NULL,  
      `time` time DEFAULT NULL,  
      PRIMARY KEY (`id`)  
    );  

    日期类型         存储空间       日期格式                                      日期范围

    datetime         8 bytes   YYYY-MM-DD HH:MM:SS   1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
    timestamp      4 bytes   YYYY-MM-DD HH:MM:SS   1970-01-01 00:00:01 ~ 2037-12-31 23:59:59
    date                3 bytes   YYYY-MM-DD                      1000-01-01 ~ 9999-12-31


    datetime和timestamp的区别:
    1.datetime 的日期范围比较大;如果有1970年以前的数据还是要用datetime.但是timestamp 所占存储空间比较小。
    2.timestamp 类型的列还有个特性:默认情况下,在 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。

    3.timestamp比较受时区timezone的影响以及MYSQL版本和服务器的SQL MODE的影响.

    使用一个常用的格式集的任何一个,你可以指定DATETIME、DATE和TIMESTAMP值:
    'YYYY-MM-DD HH:MM:SS'或'YY-MM-DD HH:MM:SS'格式的一个字符串,允许一种"宽松"的语法:任何标点可用作在日期部分和时间部分之间的分隔符。例如,'98-12-31 11:30:45'、'98.12.31 11+30+45'、'98/12/31 11*30*45'和'98@12@31 11^30^45'是等价的。
    ---------------------
    作者:漱冰濯雪
    来源:CSDN
    原文:https://blog.csdn.net/shubingzhuoxue/article/details/52606645
    版权声明:本文为博主原创文章,转载请附上博文链接!

     

     

     

    date:你直接就可以理解为2017-3-21 不带时分秒的

    datetime:相反,则是带时分秒的 

    timestamp:时间戳 很好理解(1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。)

     

    其中有提到时间范围的问题:

    时间范围

    date -- > '1000-01-01' to '9999-12-31'.

    datetime --> '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.

    timestamp -- > '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC


    常用日期函数以及转换

    1、获取当前日期:
     CURRENT_DATE()或者CURDATE()

    2、获取当前时间:
    CURRENT_TIME()或者CURTIME()

    3、获取当前日期和时间
    NOW()或者CURRENT_TIMESTAMP()

    4、linux/unix时间戳和mysql时间日期类型之间的转换:
    UNIX_TIMESTAMP(NOW())                 //将mysql的datetime转换成linux/unix的时间戳;日期时间
    UNIX_TIMESTAMP(DATE(NOW()))          //将mysql的date转换成linux/unix的日期。
    UNIX_TIMESTAMP(TIME(NOW()))          //将mysql的time转换成linux/unix的时间。(用问题)
    FROM_UNIXTIME(time_t)                //将unix的时间戳转换成mysql的datetime;日期时间
    DATE(FROM_UNIXTIME(time_t))          //日期
    TIME(FROM_UNIXTIME(time_t))          //时间
    ---------------------
    作者:Swen码农
    来源:CSDN
    原文:https://blog.csdn.net/a3025056/article/details/62885104
    版权声明:本文为博主原创文章,转载请附上博文链接!

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-23 09:14 , Processed in 0.066931 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表