我正在为我的新Go系统构建ISO和RFC投诉核心。我正在使用MySQL,目前正在为最重要的基表找出最佳设置。
我试图弄清楚如何在数据库中存储日期时间。我希望在数据库中所节省的时间占用空间之间取得良好的平衡,同时还要考虑查询能力以及与UTC的兼容性和简单的时区转换,这不会给插入和检索数据带来烦人的冲突去/ MySQL的。
我知道这在我的问题标题的背景下听起来有点奇怪。但我看到很多包装器,ORM等仍然存储UNIX时间戳(微秒?)。我认为总是存储UTC nano时间戳并且只是接受丢失日期/时间查询功能会很好。在运行具有大量不同国家/语言/时区/货币/翻译等的系统时,我不想遇到问题。 (国际化和本地化)。我之前在使用某些系统时遇到过这些问题,它让我疯狂到最终必须通过整个代码库应用大量修复程序,至少将一些转换恢复到顺序。我不希望在我的系统中发生这种情况。如果这意味着我总是需要做一些额外的编码,以便将所有存储的时间保持在正确的UTC + 0,我会认为这是理所当然的。基于ISO-8601以及时区像差和白天节省,我将确定日期/时间的输出。
上面的故事是基于意见的。但我的实际问题是选择Go的时间戳作为INT存储与MySQL TIMESTAMP或DATETIME的效率更高效;
1。)考虑到存储,最佳选择是什么?
2。)考虑到时区惯例,最佳选择是什么?
3.。)考虑速度和MySQL查询,最佳选择是什么?
答案 0 :(得分:1)
所有这些问题的答案只是将时间戳以UTC时间存储在t.UTC().UnixNano()
中,请记住时间是int64,因此无论精度如何,数据库中的时间总是为8个字节。