问题
进行 golang
应用开发时,更新 sqlite3
数据库的 executed_at
字段,保存成功。Navicat
显示数据库中的值为: 2023-01-29 14:44:39.4410545 +0800 CST
代码使用 xorm
包读取,显示值为 2023-01-29 22:44:39.4410545 +0800 CST
, 刚好多8个小时。
解决
xorm
数据库引擎 engine
初始化时,设置 engine.TZLocation
和 engine.DatabaseTZ
为东八区。
(我这边只设置 engine.DatabaseTZ
便可解决,但只设置 engine.TZLocation
不行。)
package database
import (
"time"
_ "github.com/mattn/go-sqlite3"
"xorm.io/xorm"
"xorm.io/xorm/names"
)
...
var err error
var engine *xorm.Engine
engine, err = xorm.NewEngine("sqlite3", config.SQLITE_FILENAME)
ormMap := names.GonicMapper{}
engine.SetMapper(ormMap)
engine.TZLocation, _ = time.LoadLocation("Asia/Shanghai") // 本程序时区设置为上海
engine.DatabaseTZ, _ = time.LoadLocation("Asia/Shanghai") // 数据库时区设置为上海
engine.SetTableMapper(ormMap)
engine.SetColumnMapper(ormMap)
engine.ShowSQL(true)
...
sqlite数据库时区问题,engine.TZLocation与engine.DatabaseTZ设置的时机不同,时间打印结果会不同 https://gitea.com/xorm/xorm/issues/1612