MySQL数据库DATETIME和TIMESTAMP的特性异同

一、相同点
1 .使用 'YYYY-MM-DD HH:MM:SS' 或  'YY-MM-DD HH:MM:SS' 字符串格式赋值,如:
'2018-05-22 11:30:45'
'2018^05^22 11+30+45'
'2018/05/22 11*30*45'
'2018@05@22 11^30^45' 
都是合法的;
date和time间可以用字母T分隔,如:
'2018-05-22 11:30:45' 
'2018-05-22 T 11:30:45'
是相同的;
2.使用 'YYYYMMDDHHMMSS'  或  'YYMMDDHHMMSS' 字符串格式赋值 如:
'20180522113028'
'180522113028' 
都是合法的;
3 .使用 YYYYMMDDHHMMSS  或  YYMMDDHHMMS 数字格式赋值,如:
20180522113045
180522113045
都是合法的;
4 .使用3.中数字格式时,长度必须是6,8,12或14。
当长度为8时被识别为: YYYYMMDD
当长度为14时被识别为: YYYYMMDDHHMMSS
当长度为6时被识别为: YYMMDD
当长度为12时被识别为: YYMMDDHHMMSS
5 .使用 YY开头的格式时:年份在 70-99 只会被识别为 1970-1999
年份在 00-69 只会被识别为 2000-2069
6 . 都可以保留6 位小数;
7. 日期、月份和时间位数不是必须为两位数
'2018-5-22 1:2:3'
'2018-05-22 01:02:03'
两者是相同的;
8. 都可以自动被初始化或更新为当前时间,在定义表时设置字段默认值:
初始化时获取: CURRENT_TIMESTAMP,一般用户create_time字段
更新时获取: CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,一般用于update_time字段

二、 不同点
1. 范围:
DATETIME: form '1000-01-01 00:00:00' to   '9999-12-31 23:59:59'
TIMESTAMP: from '1970-01-01 00:00:01' UTC to   '2038-01-19 03:14:07' UTC
带小数范围:
DATETIME: form '1000-01-01 00:00:00.000000'   to   '9999-12-31 23:59:59.999999'
TIMESTAMP: from '1970-01-01 00:00:01.000000' to   '2038-01-19 03:14:07.999999'
2. DATETIME是由 TIMESTAMP的语法生成的;
3.MySQL会将时间 从当前时区转换为UTC存储,读取时再将其从UTC转换为当前时区;而 DATETIME 不会;

三、其他
1.本文针对MySQL 5.6分析
https://dev.mysql.com/doc/refman/5.6/en/datetime.html


                                                                                                                                                     Copyright © 2018 Ansel. All rights reserved.


猜你喜欢

转载自blog.csdn.net/qq_29039705/article/details/80416286