UnixNano和MySQL的使用差异

UnixNano和MySQL的使用差异,mysql,time,go,Mysql,Time,Go,我正在为我的新Go系统构建ISO和RFC投诉核心。我正在使用MySQL,目前正在为最重要的基表找出最佳设置 我正在试图找出如何在数据库中存储日期和时间。我希望在数据库中节省的时间将占用的空间、查询能力、与UTC的兼容性和轻松的时区转换之间取得良好的平衡,这不会在向Go/MySQL中插入和检索数据时产生恼人的冲突 我知道这听起来有点奇怪,就我问题的标题而言。但我看到很多包装器、ORM等仍然存储UNIX时间戳(微秒?)。我认为最好始终存储UTC nano时间戳,并接受丢失日期/时间查询功能。我不想在

我正在为我的新Go系统构建ISO和RFC投诉核心。我正在使用MySQL,目前正在为最重要的基表找出最佳设置

我正在试图找出如何在数据库中存储日期和时间。我希望在数据库中节省的时间将占用的空间、查询能力、与UTC的兼容性和轻松的时区转换之间取得良好的平衡,这不会在向Go/MySQL中插入和检索数据时产生恼人的冲突

我知道这听起来有点奇怪,就我问题的标题而言。但我看到很多包装器、ORM等仍然存储UNIX时间戳(微秒?)。我认为最好始终存储UTC nano时间戳,并接受丢失日期/时间查询功能。我不想在运行大量不同国家/语言/时区/货币/翻译等(国际化和本地化)的系统时遇到问题。我以前在工作中的一些系统中已经遇到过这些问题,这让我非常恼火,最终不得不在整个代码库中应用大量的修复程序,以使至少部分转换恢复正常。我不希望这种情况发生在我的系统中。如果这意味着我总是要做一些额外的编码,以保持所有存储的时间在正确的UTC+0,我会认为这是理所当然的。根据ISO-8601和时区畸变和白天节省,我将确定日期/时间的输出

上面的故事是基于观点的。但我的实际问题是,选择Go的时间戳作为INT存储比选择MySQL时间戳或DATETIME更有效

1.)考虑到存储,什么是最理想的

2.)考虑到时区约定,什么是最理想的


3.)考虑到速度和MySQL查询,什么是最理想的?

所有这些问题的答案都是使用
t.UTC().UnixNano()
以UTC时间存储时间戳,请记住,时间是int64,因此无论精度如何,数据库中的时间总是8字节。

我是否会基于整数值进行日期偏移匹配?我将丢失所有时间函数,但我想将UnixNano绑定到query@Allendar如果您正在使用
https://github.com/go-sql-driver/mysql/
它透明地处理它,但是很容易将UnixNano()转换为时间,只需
t:=time.Unix(0,nanoValue)