请教个问题,为什么数据库的日期用字符串存,字符串格式是 20201027195800 这种
看了好几家公司的 Java 项目都有这么干的,一直想不通。
数据库是 Oracle,也有 MySQL 的。
除了这个以外,还有字符串做主键,AA0001 这种。
还有字符串做关联查询等等。
最骚的是字符串传参。。
感觉 Oracle 里的字符串是万能的。是他们太菜了还是我太菜了。。
看了好几家公司的 Java 项目都有这么干的,一直想不通。
数据库是 Oracle,也有 MySQL 的。
除了这个以外,还有字符串做主键,AA0001 这种。
还有字符串做关联查询等等。
最骚的是字符串传参。。
感觉 Oracle 里的字符串是万能的。是他们太菜了还是我太菜了。。
你们说的整形存的可能是 unix 时间戳,这个很正常,特别是 PHP 的系统里比较常见,计算比较都很方便。
但是这是年月日时分秒格式的,比较计算啥的都要用函数。
不知道好处在哪,所以才问的。
退一步说就算这种年月日时分秒的格式有某方面的优势,也应该用整形存吧,用字符串真的不用考虑索引的感受吗
首先字符串就是任意长度的整数,没什么区别。
日期时间的存法很多,比如
1. 用 unix timestamp,缺点是人类不能一眼看出来那是哪天。
2. 用数据库内置的 datetime 类型,但 MySQL 的 datetime 有奇怪的行为还不能带时区。
3. 用主说的这种,存字符串类型。
4. 用主说的这种,存整数类型。
4 比 3 省 6 个 byte 的空间。
但是这个格式一定要从字符串转换过来,用的时候也必然要转回字符串,所以 3 比 4 节省一点 cpu 。
实际上 3 和 4 的差别是无关紧要的事情,没人在乎 6 个 byte,也没人在乎那一点点 cpu 。
但 1 和 2 的缺点是确实存在的。
如果用定长的字符串,也就是不需要额外存长度,也不需要在结尾补一个 0,那就是差 6 bytes