签到功能,数据库存时间年月日为什么用varchar

做一个签到功能

`create_time` decimal(20,3) NOT NULL,
  `create_date_ymd` varchar(15) NOT NULL COMMENT '签到时间年月日',
  `create_date_ym` varchar(15) NOT NULL,
  `create_date_y` int(4) NOT NULL,
  `create_date_m` int(2) NOT NULL,
  `create_date_d` int(2) NOT NULL,

不是很明白年月日create_date_ymd 这个字段为什么是varchar而不是int
后面这些字段用处是:之后清理没用的数据

阅读 4.6k
10 个回答

字段名create_date_ymd ymd不是指时间格式吗?有格式的时间是int的话再转一次?其实我觉得存date类型好点

中间没符号的话,你完全可以使用int

也可以存Date类型,但是varchar类型前后台转换都方便.

这个就看创建数据表人的习惯了,看这个表就知道喜欢使用varchat 不怎么喜欢使用date类型

如果前端显示方式与后端对等的话,使用varchar并没有什么问题。
但是目前而言,一般的做法是,使用datetime或者timestamp来保存date数据。
这样,无论前端显示的是Y/M/DY-M-D还是Y年M月D日,后端都可以很方便的转换(因为保存的数据不绑定格式)。
但是这样做的话,上面的create_time就没什么意义了,因为date和timestamp的精度是可以去到秒的,也可以推算回日期时间。
所以,我想,create_time后面的字段可能是后来出现某需求而增加的?

习惯问题吧,我个人是觉得int或者date 是更好的

新手上路,请多包涵

这属于个人习惯问题吧 我一般存bigint 存到微秒

习惯问题,我是int或者datetime

后来实在不解就问了表设计者,当查询某一天的数据,可以直接用create_date_ymd = '2018-03-27',这样速度快。

能用就行了~~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题