我正在为我的新 Go 系统构建一个 ISO 和 RFC 投诉核心。我正在使用 MySQL,目前正在为最重要的基表寻找最佳设置。
我想弄清楚如何在数据库中存储日期时间。我想在数据库中保存的时间将占用的空间与查询功能和与 UTC 的兼容性以及简单的时区转换之间取得良好的平衡,这不会给插入数据和从中检索数据带来烦人的冲突去/MySQL。
我知道这在我的问题标题中听起来有点奇怪。但我看到很多包装器、ORM 等仍在存储 UNIX 时间戳(微秒?)。我认为始终存储 UTC 纳米时间戳并接受丢失日期/时间查询功能会很好。我不想在使用大量不同国家/语言/时区/货币/翻译/等运行系统时遇到问题。 (国际化和本地化)。我之前在使用某些系统时已经遇到过这些问题,这让我很抓狂,以至于最终必须在整个代码库中应用大量修复程序,以至少将某些转换恢复到正常状态。我不希望这种情况发生在我的系统中。如果这意味着我总是必须做一些额外的编码来使所有存储的时间保持正确的 UTC+0,我会认为这是理所当然的。我将根据 ISO-8601 和时区偏差和日间节约来确定日期/时间的输出。
以上故事是基于观点的。但我的实际问题是,与 MySQL TIMESTAMP 或 DATETIME 相比,选择 Go 的时间戳作为 INT 存储更有效;
1.) 考虑存储时什么是最佳选择?
2.) 考虑到时区约定,什么是最佳选择?
3.) 考虑到速度和 MySQL 查询,什么是最佳的?
最佳答案
所有这些问题的答案只是用 t.UTC().UnixNano()
以 UTC 时间存储时间戳,记住时间是 int64,所以它总是 8 个字节数据库不考虑精度。
关于mysql - UnixNano 和 MySQL 用法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26980594/