在 MySQL 数据库中存储 RFC3339 时间时的最佳做法是什么?
What is best practice when storing RFC3339 time in a MySQL database?
我在 Google Cloud Datastore NoSQL 数据库中有数据。此数据库中的对象包含 type Time.time
字段,具体为 RFC3339 格式 (YYYY-MM-DDThh:mm:ssTZD)。我正在将其中一些数据移动到 Google 云 SQL 数据库中,我想知道在 MySQL 数据库中存储 RFC3339 格式的时间数据时什么是最佳实践。
This post 强烈建议如下:
All date and time columns shall be INT UNSIGNED NOT NULL
, and shall
store a Unix timestamp in UTC.
那么,我应该只使用 Golang's func (t Time) Unix()
并以这种方式存储数据吗?有哪些替代方法来存储数据?如果我不听从发布者的建议,我可能会 运行 陷入什么样的问题?
如果您使用 go-sql-driver/mysql
,您可以要求驱动程序将 DATE 和 DATETIME 自动扫描到 time.Time,方法是将 parseTime=true
添加到您的连接字符串。
见https://github.com/go-sql-driver/mysql#timetime-support
示例代码:
db, _ := sql.Open("mysql", "root:@/?parseTime=true")
var myTime time.Time
row, err := db.QueryRow("SELECT current_timestamp()")
row.Scan(&myTime)
fmt.Println(myTime)
我在 Google Cloud Datastore NoSQL 数据库中有数据。此数据库中的对象包含 type Time.time
字段,具体为 RFC3339 格式 (YYYY-MM-DDThh:mm:ssTZD)。我正在将其中一些数据移动到 Google 云 SQL 数据库中,我想知道在 MySQL 数据库中存储 RFC3339 格式的时间数据时什么是最佳实践。
This post 强烈建议如下:
All date and time columns shall be
INT UNSIGNED NOT NULL
, and shall store a Unix timestamp in UTC.
那么,我应该只使用 Golang's func (t Time) Unix()
并以这种方式存储数据吗?有哪些替代方法来存储数据?如果我不听从发布者的建议,我可能会 运行 陷入什么样的问题?
如果您使用 go-sql-driver/mysql
,您可以要求驱动程序将 DATE 和 DATETIME 自动扫描到 time.Time,方法是将 parseTime=true
添加到您的连接字符串。
见https://github.com/go-sql-driver/mysql#timetime-support
示例代码:
db, _ := sql.Open("mysql", "root:@/?parseTime=true")
var myTime time.Time
row, err := db.QueryRow("SELECT current_timestamp()")
row.Scan(&myTime)
fmt.Println(myTime)