构建数据库写程序避免不了使用日期和时间,对于数据库来说,有多种日期时间字段可供选择,如 timestamp 和 datetime 以及使用 int 来存储 unix timestamp。

不仅新手,包括一些有经验的程序员还是比较迷茫,究竟我该用哪种类型来存储日期时间呢?

那我们就一步一步来分析他们的特点,这样我们根据自己的需求选择合适的字段类型来存储 (优点和缺点是比较出来的 , 跟父母从小喜欢拿邻居小孩子跟自己比一样的)

datetime 和 timestamp

datetime 更像日历上面的时间和你手表的时间的结合,就是指具体某个时间。

timestamp 更适合来记录时间,比如我在东八区时间现在是 2016-08-02 10:35:52, 你在日本(东九区此时时间为 2016-08-02 11:35:52),我和你在聊天,数据库记录了时间,取出来之后,对于我来说时间是 2016-08-02 10:35:52,对于日本的你来说就是 2016-08-02 11:35:52。所以就不用考虑时区的计算了。

时间范围是 timestamp 硬伤(1970-2038),当然 datetime (1000-9999)也记录不了刘备什么时候出生(161 年)。

timestamp 和 UNIX timestamp

显示直观,出问题了便于排错,比好多很长的 int 数字好看多了

int 是从 1970 年开始累加的,但是 int 支持的范围是 1901-12-13 到 2038-01-19 03:14:07,如果需要更大的范围需要设置为 bigInt。但是这个时间不包含毫秒,如果需要毫秒,还需要定义为浮点数。datetime 和 timestamp 原生自带 6 位的微秒。

timestamp 是自带时区转换的,同上面的第 2 项。

用户前端输入的时间一般都是日期类型,如果存储 int 还需要存前取后处理

总结:

timestamp 记录经常变化的更新 / 创建 / 发布 / 日志时间 / 购买时间 / 登录时间 / 注册时间等,并且是近来的时间,够用,时区自动处理,比如说做海外购或者业务可能拓展到海外

datetime 记录固定时间如服务器执行计划任务时间 / 健身锻炼计划时间等,在任何时区都是需要一个固定的时间要做某个事情。超出 timestamp 的时间,如果需要时区必须记得时区处理

UNIX timestamps 使用起来并不是很方便,至于说比较取范围什么的,timestamp 和 datetime 都能干。

如果你不考虑时区,或者有自己一套的时区方案,随意了,喜欢哪个上哪个了

laravel 是国际化设计的框架,为了程序员方便、符合数据库设计标准,所以 created_at updated_at 使用了 timestamp 是无可厚非的。

有没有一个时间类型即解决了范围、时区的问题?这是不可能的,不是还有 tinyInt BigInt 吗?取自己所需,并且 MySQL 是允许数据库字段变更的。

生日可以使用多个字段来存储,比如 year/month/day,这样就可以很方便的找到某天过生日的用户 (User::where(['month' => 8, 'day' => 12])->get())

构建项目的时候需要认真思考一下,自己的业务场景究竟用哪种更适合。选哪个?需求来定。

mysql 日期类型比价_MySQL 日期时间类型怎么选?相关推荐

  1. mysql datetime timestamp 索引_MYSQL中时间类型底层存储,DATETIME ,TIMESTAMP,INT 如何选择?...

    在优化索引时,思考了一个问题,DATE, DATETIME, TIMESTAMP,还有INT存储的时间,在索引中哪个效率更高一些? 索引存储的,如果单纯的测试,而不去了解底层存储的方式和类型就不能断言 ...

  2. mysql定义日期类型格式_Mysql 日期时间类型详解

    MySQL 中有多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异,表3-2 中列出了MySQL 5.0 中所支持的日期和时间类型. 这些数据类型的主要区别如下:  * 如果要用来表示年月 ...

  3. mysql 日期转换天数_MySQL 日期操作 增减天数、时间转换、时间戳

    MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数. select datediff('2008-08-08', '2008-08-01'); ...

  4. mysql日期加天_MySql日期加天数,小时,分钟...得到新的时间

    在当前的日期上加三天,天数随便改: SELECT date_add(CURRENT_DATE(), interval 3 day); 在指定的日期上加三天: SELECT date_add('2014 ...

  5. oracle数据库日期格式的运算,Oracle时间类型date,timestamp时间差计算

    Oracle的时间类型有两种date和timestamp.   date精确到秒,timestamp精确到毫秒. 1.计算date类型的时间差 可以先把年,月,日,小时,分,秒用to_char函数拆分 ...

  6. mysql 日期函数大全_MYSQL 日期函数大全

    对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型. 这里是一个使用日期函数的例子.下面的查询选择了所有记录,其date_col的值是在最后30天以内: my ...

  7. Mysql日期的加减法_mysql日期加减

    一.MySQL 为日期增加一个时间间隔:date_add(). 1.  示例: set @dt = now(); select date_add(@dt, interval 1 day);       ...

  8. mysql九九查询法_mysql日期查询法

    话说有一文章表article,存储文章的添加文章的时间是add_time字段,该字段为int(5)类型的,现需要查询今天添加的文章总数并且按照时间从大到小排序,则查询语句如下: 02 03 1 sel ...

  9. mysql 新闻类表_mysql 数据库 新闻类型

    MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述.概 ...

最新文章

  1. php unicode转义字符串,PHP字符串中的Unicode字符
  2. python安装win32api pywin32 后出现 ImportError: DLL load failed
  3. linux下curl的使用
  4. 经典C语言程序100例之四八
  5. python 类装饰器和函数装饰器区别_python进阶之装饰器之4在类中定义装饰器,将装饰器定义为类,两者的区别与联系...
  6. 马踏棋盘算法(骑士周游)+贪心优化
  7. java 设计模式_Java设计模式的常见应用场景
  8. Delphi调用Android的.so文件(转)
  9. Rust+Yew之hello world
  10. 讲的是关于提高网站速度的内容|转自csdn
  11. java正则出现次数_正则表达式(二)—匹配次数的正则
  12. layui 滚动加载与ajax,909422229_layUi关于ajax与loading问题
  13. 指尖下的js —— 多触式web前端开发之三:处理复杂手势
  14. .Net Log4Net配置多文件日志记录
  15. Atitit mybatis的扩展使用sql udf,js java等语言 目录 1.1. 默认,mybatis使用xml,sql等语言来书写业务流程 1 2. 使用ognl调用java函数 1 3
  16. 通用条形码生成 API 接口
  17. 大土狗书屋好书推荐--《史蒂夫·乔布斯传》
  18. 无名小站超雅虎奇摩成台湾第一大网站
  19. php 竖向文字水印,PHP中实现文字水印和图片水印的方法
  20. 2.1.2笼形天线、V形对称天线、电视发射天线

热门文章

  1. Android缓存学习入门(二)
  2. Java 高级特性 --- 反射
  3. 转载:实用 FRIDA 进阶 --- objection :内存漫游、hook anywhere、抓包
  4. 小甲鱼 OllyDbg 教程系列 (十四) : 模态对话框 和 非模态对话框 之 URlegal 和 movgear
  5. apt-get、apt、yum、dpkg、rpm
  6. Freemarker静态化页面的使用
  7. 现代软件工程 第十三章 【软件测试】 练习与讨论
  8. java中的位移运算符_java中的移位运算符(, , )
  9. Android studio使用手册说明
  10. 冯提莫在B站的受欢迎度