SQL中datetime和timestamp的区别

在开发一个简单的报名程序时,要求在每一条新插入的记录后面添加一个日期字段,方便日后查询和排序。于是立即百度,发现可以使用datetime或timestamp两种日期类型来实现。这对于爱纠结的我来说是不被允许的,于是立即去找它们的区别。但是搜出来的要么是长篇大论,要么没有重点,于是自己总结了下这些文章的精华部分,以求精益求精。

 
 
datetime
1、允许为空值,可以自定义值,系统不会自动修改其值。
2、不可以设定默认值,所以在不允许为空值的情况下,必须手动指定datetime字段的值才可以成功插入数据。
3、虽然不可以设定默认值,但是可以在指定datetime字段的值的时候使用now()变量来自动插入系统的当前时间。
结论:datetime类型适合用来记录数据的原始的创建时间,因为无论你怎么更改记录中其他字段的值,datetime字段的值都不会改变,除非你手动更改它。

 

 
timestamp
1、允许为空值,但是不可以自定义值,所以为空值时没有任何意义。
2、默认值为CURRENT_TIMESTAMP(),其实也就是当前的系统时间。
3、数据库会自动修改其值,所以在插入记录时不需要指定timestamp字段的名称和timestamp字段的值,你只需要在设计表的时候添加一个timestamp字段即可,插入后该字段的值会自动变为当前系统时间。
4、以后任何时间修改表中的记录时,对应记录的timestamp值会自动被更新为当前的系统时间。
结论:timestamp类型适合用来记录数据的最后修改时间,因为只要你更改了记录中其他字段的值,timestamp字段的值都会被自动更新。

 

转载于:https://www.cnblogs.com/mangoVic/p/5642527.html

### DATETIME TIMESTAMP 的主要差异 在 SQL 数据库中,`DATETIME` `TIMESTAMP` 是两种用于表示日期时间的数据类型,但两者之间存在显著的区别。 #### 存储方式 - **DATETIME**: 这种数据类型的值是以固定的格式存储的,通常占用8个字节的空间。它保存的是年、月、日、小时、分钟、秒以及微秒的信息[^1]。 - **TIMESTAMP**: 同样也记录完整的日期时间精度,不过其内部实现依赖于特定数据库系统的机制。对于某些SQL版本而言,这可能意味着更少的磁盘空间消耗,因为它们可能会采用优化过的二进制形式来表达同样的信息[^2]。 #### 时区处理 - **DATETIME**: 当插入或查询时不考虑服务器所在的时区设置;也就是说,默认情况下它是与时区无关的时间戳记[^3]。 - **TIMESTAMP**: 插入时会转换成UTC(协调世界时),而在读取的时候则会被自动调整回客户端所在时区显示给用户查看[^4]。 #### 范围限制 - **DATETIME**: 支持非常宽泛的历史时期内的任意时刻点,具体取决于所使用的RDBMS平台及其配置参数设定[^5]。 - **TIMESTAMP**: 受限于Unix纪元起点之后的一段时间内有效,即从1970年开始直到大约2038年的某个时候结束,在此之外无法正确工作[^6]。 ```sql -- 创建包含这两种字段类型的表格示例 CREATE TABLE example ( id INT PRIMARY KEY, datetime_col DATETIME NOT NULL, timestamp_col TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值