mysqldatetime与timestamp区别
datetime:
1、保存格式为YYYYMMDDHHMMSS(年⽉⽇时分秒)的整数,所以,它与时区⽆关,存⼊的是什么值就是什么值,不会根据当前时区进⾏转换。
unix时间戳转换日期格式2、从mysql 5.6.4中,可以存储⼩数⽚段,最多到⼩数点后6位,显⽰时格式为 yyyy-MM-dd HH:mm:ss[.222222]
mysql5.5中,没有⼩数⽚段,精确到秒。所以,我再从5.6版本迁移到5.5时,因⽣成的sql中datetime(6)有⼩数⽚段,⽆法导⼊。
3、存储范围:从1000-01-01 00:00:00 到'9999-12-31 23:59:59'
4、长度,8个字节,datetime(n),n不是存储长度,⽽是显⽰的⼩数位数,即使⼩数位数是0,存储是也是存储的6位⼩数,仅仅显⽰0位⽽已;要想显⽰⼩数,设置datetime(n),n=3显⽰⼩数点后3位,毫秒,n=6显⽰⼩数点后6位,微秒。
timestamp:
1、存⼊的是⾃1970-01-01午夜(格林尼治标准时间)以来的秒数,它和unix时间戳相同。所以它与时区有关,查询时转为相应的时区时间。⽐如,存储的是1970-01-01
00:00:00,客户端是北京,那么就加8个时区的⼩时1970-01-01 08:00:00。
2、有⼩数⽚段,⾄少从5.5就开始有
3、存储范围:'1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07'
4、可以当做时间戳使⽤,在更新时,⾃动更新,这⼀列只能由系统⾃动更新,不能由sql更新,这个在乐观锁时有⼴泛的应⽤
6、长度,4字节,因为存储长度的原因,决定了它⽀持的范围的⽐datetime的要⼩
7、显⽰时,显⽰⽇期和时间
datetime和timestamp都可以当作时间戳使⽤
datetime和timestamp都可以设置默认值,并且在其他列值更新时更新为当前时间,DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP,这俩⼦句可以⼀起使⽤,顺序⽆所谓,⼀起使⽤的意思是,默认值是当前时间并且在其他列更新值时,此列更新为当前时间。
ALTER TABLE `mytest`.`date_time_test`
CHANGE COLUMN `col2` `col2` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ;
date
date,时分秒都存储了,但只显⽰⽇期。对应Java中的java.sql.Date
datetime与时区⽆关、timestamp与时区有关
1、查看当前时区,并创建表test_date,⼀个是timestamp列,⼀个是datetime列
2、插⼊两条数据,相同的时间。修改时区为0时区(格林尼治时区)后,查看时间,发现timestamp改变了,datetime没变。
总结
datetime、timestamp精确度都是秒,datetime与时区⽆关,存储的范围⼴(1001-9999),timestamp与时区有关,存储的范围⼩(1970-2038)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论