mysql timestamp和datetime 简单区别

本文探讨了timestamp和datetime在存储方式与时区处理上的不同。timestamp存储受时区影响,存储和检索时会根据当前时区进行转换;而datetime存储不受时区影响。此外,timestamp占用4字节,datetime则占用8字节。

1.timestamp存储和时区相关,即会根据时区做转换

如:+8时区存进去, 而在+9时区取出,则时间为+9时区的时间

而datetime存储和时区不相关,不会做转换

如:+8时区存进去,在+9时区取出时,仍为+8时区的时间

2.占用空间不一样,前者4字节,后者8字节

 

例子:

create table t_timezone ( ts timestamp, dt datetime);

 

show variables like '%time_zone%';

system_time_zone  cst(China Standard Time)

time_zone +08:00

 

insert into t_timezone(now(),now());

 

select * from t_timezone;

ts                                                       dt

2018-11-08 10:11:30                  2018-11-08 10:11:30

 

set time_zone='+9:00';

 

select * from t_timezone;

ts                                                       dt

2018-11-08 10:11:30                  2018-11-08 11:11:30

 

Impala的`timestamp`类型MySQL的`datetime`类型在功能上均用于表示日期时间,但两者在精度、存储方式、时区处理、适用场景等方面存在显著差异。 ### 精度表示范围 Impala的`timestamp`支持到微秒级别(6位小数),表示范围从公元前4713年到公元294276年,这使得它适用于需要高精度时间戳的场景[^2]。MySQL的`datetime`类型在5.6.4及之后版本中支持到微秒级别,但其表示范围仅限于1000年到9999年,因此在时间跨度上远小于Impala的`timestamp`[^5]。 ### 存储方式 Impala的`timestamp`在底层存储时使用64位整数表示时间戳(自1970-01-01 UTC以来的微秒数),结合了高效的时间计算能力[^2]。MySQL的`datetime`在5.6.4之前版本中以字符串形式存储,占用8字节;5.6.4之后版本中则以二进制格式存储,包含年、月、日、时、分、秒及微秒信息,不依赖时区[^5]。 ### 时区处理 Impala的`timestamp`默认以UTC时间存储,但在查询时可以根据会话时区设置进行转换,支持使用`from_utc_timestamp()``to_utc_timestamp()`函数进行显式时区转换[^3]。MySQL的`datetime`类型本身不存储时区信息,仅表示本地时间或UTC时间,具体取决于应用逻辑,因此在跨时区环境中容易引发歧义[^5]。 ### 适用场景 Impala的`timestamp`适用于大规模数据仓库环境,尤其适合需要高精度时间戳时区转换的分析型查询[^2]。MySQL的`datetime`更适用于事务型数据库系统,如Web应用后台、小型管理系统等,其设计更注重兼容性易用性[^5]。 ### 性能兼容性 Impala的`timestamp`在Kudu集成时存在一定的兼容性问题,例如作为主键可能导致写入异常或服务宕机[^1]。MySQL的`datetime`在InnoDB引擎中表现稳定,支持索引、分区等高级特性,且在应用层有广泛的库支持。 ### 示例对比 ```sql -- Impala中timestamp的使用 SELECT cast('2023-10-01 12:30:45.123456' AS TIMESTAMP) AS ts; SELECT microseconds_add(now(), 1000000) AS ts; -- MySQLdatetime的使用 SELECT CAST('2023-10-01 12:30:45.123456' AS DATETIME(6)) AS dt; SELECT DATE_ADD(NOW(), INTERVAL 1 SECOND) AS dt; ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值