zoukankan      html  css  js  c++  java
  • mysql解决datetime与timestamp精确到毫秒的问题

    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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    带你走进Ajax
    基础
    基础
    基础-文字
    C++ part6.5
    操作系统 part4
    操作系统 part3
    计算机网络 part3 HTTP&HTTPS
    计算机网络 part2
    计算机网络 part1 TCP
  • 原文地址:https://www.cnblogs.com/softidea/p/6135242.html
Copyright © 2011-2022 走看看