数据库创建表

在关系型数据库中,datetime和timestamp是两种用于表示日期时间的数据类型。它们的区别如下:

  1. 存储范围不同:datetime类型可以存储的日期时间范围是从'1000-01-01 00:00:00'到'9999-12-31 23:59:59';而timestamp类型可以存储的日期时间范围是从'1970-01-01 00:00:01'到'2038-01-19 03:14:07'。
  2. 存储空间不同:datetime类型在MySQL中占用8个字节的存储空间,而timestamp类型在MySQL中占用4个字节的存储空间。
  3. 存储方式不同:datetime类型存储的日期时间与时区无关,存储的是指定时区的本地日期时间;而timestamp类型存储的是从'1970-01-01 00:00:00'以来的秒数,也就是UTC时间。
  4. 默认值不同:datetime类型的默认值为'0000-00-00 00:00:00',而timestamp类型的默认值为当前时间。
  5. 自动更新行为不同:当一条记录被更新时,如果该记录的某个datetime类型的列被更新,则不会自动更新该列的值;而如果该记录的某个timestamp类型的列被更新,则该列的值会被自动更新为当前时间。

总的来说,datetime类型适用于存储与时区无关的日期时间,而timestamp类型适用于存储与时区有关的日期时间,例如存储记录创建或修改的时间戳。

空间占用

  • TIMESTAMP :占 4 个字节(小数秒+3 个字节)
  • DATETIME:在 MySQL 5.6.4 之前,占 8 个字节 ,之后版本,占 5 个字节。(小数秒+3 个字节)
  • 使用 now() 存储当前时间时,保存的实际值,是否与当前计算机时间一致?

    • TIMESTAMP:可能不一致。存储值会被转换成 UTC 时间值再存入数据库。
    • DATETIME:与当前时间是一致的。

    TIMESTAMP 使用场景:计算飞机飞行时间

    一架飞机,从中国北京起飞,降落在美国纽约,计算它从北京飞往纽约的飞行时间。飞机在北京时间 2021-10-10 11:05:00 从北京起飞,在纽约时间 2021-10-10 09:50:00 降落(JL8006)。

    这个场景中,如果使用 TIMESTAMP 来存时间,起飞和降落时间的值,都会被转换成 UTC 时间,所以它们直接相减即可获得结果。但如果使用 DATATIME 格式存时间,还需要进行转换,才可以完成,容易出错。

    DATATIME 使用场景:记录信息修改时间

    如果只是记录文件修改时间,最后更新时间这种不涉及加减转换的情况,用 DATATIME 来存更直接,更方便,可读性高,不绕弯子,不容易出错。

CREATE TABLE `tb_follow`(
 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT `主键`,
 `user_id` bigint(20) unsigned NOT NULL,
 `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY(`id`)
 )ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
 

"mb"在utf8mb4字符集中表示"multi-byte",意为"多字节",表示这种字符集支持使用1-4个字节表示Unicode字符集中的所有字符,因此可以称为"多字节"字符集。这个名称的含义是和utf8字符集相对应的,因为utf8字符集只支持使用1-3个字节表示Unicode字符集中的字符,因此被称为"变长多字节"字符集。

  1. 数据类型不同:CURRENT_TIMESTAMP没有括号返回的是MySQL的日期时间类型,而NOW()返回的是MySQL的字符串类型。

#你觉得今年春招回暖了吗#
全部评论
看了你的分享,就意识到我平时对一些知识点总是学的不透彻啊
点赞 回复 分享
发布于 2023-03-18 21:45 安徽
很开心,感觉学到了一点
点赞 回复 分享
发布于 2023-03-18 21:33 江苏

相关推荐

05-30 18:54
武汉商学院 Java
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务