请教个问题,为什么数据库的日期用字符串存,字符串格式是 20201027195800 这种

2020-10-27 20:05:48 +08:00
 VeryZero

看了好几家公司的 Java 项目都有这么干的,一直想不通。

数据库是 Oracle,也有 MySQL 的。

除了这个以外,还有字符串做主键,AA0001 这种。

还有字符串做关联查询等等。

最骚的是字符串传参。。

感觉 Oracle 里的字符串是万能的。是他们太菜了还是我太菜了。。

4337 次点击
所在节点    程序员
36 条回复
wilsonWei
2020-10-28 13:26:42 +08:00
@qiayue 也分时区的
Kr98
2020-10-28 13:30:30 +08:00
@wilsonWei timestamp 是以 utc 为基准点,datetime 类型+时区是数据库的功能,和 timestamp 无关。
wilsonWei
2020-10-28 14:14:18 +08:00
@Kr98 我说的带时区的 timestamp,指的是数据库的字段类型:timestamp with time zone,并非 unix 时间戳
xuanbg
2020-10-28 14:25:11 +08:00
@no1xsyzy ISO 8601 什么的会被前端打死……
xuanbg
2020-10-28 14:30:35 +08:00
@qiayue 时间戳的值没有时区,但获取这个值的时候就和时区有关系了。错误的系统时区将会导致获取到错误的时间戳。
v2webdev
2020-10-28 14:30:37 +08:00
@CRVV 您好,请教一下,“多出 6 bytes” 是怎么计算的?
cmdOptionKana
2020-10-28 15:06:12 +08:00
@xuanbg 不可能吧,ISO8601 对前端非常友好,js 标准库就支持 ISO8601,最流行的日期时间库 day.js 也重点支持 ISO8601 。
hitmanx
2020-10-28 15:34:26 +08:00
@v2webdev 我猜他指的是 char[14] vs uint64_t
a719031256
2020-10-28 15:47:01 +08:00
太懒了
我手上的项目就遇到,给建表的人说字段属性跟注释有歧义,然后这家伙就直接把所有字段属性改为 varchar,所有的值含义都通过口口相传
wilsonWei
2020-10-28 15:55:23 +08:00
@a719031256 好家伙。。这规范也太差劲了,没人管管吗。。。
a719031256
2020-10-28 15:57:29 +08:00
@wilsonWei 管什么,国企的开发只要文档够标准就行了,至于代码和数据库设计将就效率而不是质量,文档要求每一个功能点要够详细,截图要多。。。。
CRVV
2020-10-28 16:09:06 +08:00
@v2webdev
用整数的话,32 位不够,那就要用 64 位的,占 8 bytes
那个字符串是 14 个数字,14 bytes

如果用定长的字符串,也就是不需要额外存长度,也不需要在结尾补一个 0,那就是差 6 bytes
ETiV
2020-10-28 16:13:53 +08:00
存时间戳
海外不仅跨时区,遇到有夏令时的地方有的搞了…
wilsonWei
2020-10-28 16:22:09 +08:00
@a719031256 好吧,追求不一样
a719031256
2020-10-28 16:26:33 +08:00
@wilsonWei 这些人就是懒,啥事都是扔给我们帮他们弄,还有另一个人脸识别项目,海康 sdk 部署 Linux 环境居然不知道把动态库扔到系统库中,还要让我周六帮他弄,明明海康的文档写得清清楚楚
wilsonWei
2020-10-28 17:45:50 +08:00
@a719031256 这些大爷们就是懒,工作一点都不上心

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719171

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX