From 734728fa9c221b2882494d2c93095efe455b76d0 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 25 Oct 2019 19:54:02 +0800 Subject: [PATCH] improve time handling for gdb --- .example/database/gdb/mysql/config.toml | 2 +- .example/database/gdb/mysql/gdb_insert.go | 22 ++++++++++++++-------- database/gdb/gdb_func.go | 6 ++++++ database/gdb/gdb_mysql.go | 2 +- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/.example/database/gdb/mysql/config.toml b/.example/database/gdb/mysql/config.toml index 45a2e8dd9..31d8819e5 100644 --- a/.example/database/gdb/mysql/config.toml +++ b/.example/database/gdb/mysql/config.toml @@ -2,5 +2,5 @@ # MySQL数据库配置 [database] debug = true - link = "mysql:root:12345678@tcp(127.0.0.1:3306)/test" + link = "mysql:root:12345678@tcp(127.0.0.1:3306)/test?parseTime=true&loc=Local" diff --git a/.example/database/gdb/mysql/gdb_insert.go b/.example/database/gdb/mysql/gdb_insert.go index f53e94503..509e30106 100644 --- a/.example/database/gdb/mysql/gdb_insert.go +++ b/.example/database/gdb/mysql/gdb_insert.go @@ -2,20 +2,26 @@ package main import ( "fmt" + "github.com/gogf/gf/database/gdb" "time" - - "github.com/gogf/gf/frame/g" ) func main() { - db := g.DB() - // 开启调试模式,以便于记录所有执行的SQL + //db := g.DB() + + gdb.AddDefaultConfigNode(gdb.ConfigNode{ + LinkInfo: "root:12345678@tcp(127.0.0.1:3306)/test?parseTime=true&loc=Local", + Type: "mysql", + Charset: "utf8", + }) + db, _ := gdb.New() + db.SetDebug(true) - fmt.Println(time.Now()) - r, e := db.Table("user").Data(g.Map{ - "create_time": time.Now().Local(), - }).Insert() + type User struct { + CreateTime time.Time `orm:"create_time"` + } + r, e := db.Table("user").Data(User{CreateTime: time.Now()}).Insert() if e != nil { panic(e) } diff --git a/database/gdb/gdb_func.go b/database/gdb/gdb_func.go index b362244ae..609b50e08 100644 --- a/database/gdb/gdb_func.go +++ b/database/gdb/gdb_func.go @@ -12,6 +12,7 @@ import ( "errors" "fmt" "github.com/gogf/gf/internal/empty" + "github.com/gogf/gf/os/gtime" "reflect" "strings" "time" @@ -364,6 +365,11 @@ func bindArgsToQuery(query string, args []interface{}) string { switch kind { case reflect.String, reflect.Map, reflect.Slice, reflect.Array: return `'` + gstr.QuoteMeta(gconv.String(args[index]), `'`) + `'` + case reflect.Struct: + if t, ok := args[index].(time.Time); ok { + return `'` + gtime.NewFromTime(t).String() + `'` + } + return `'` + gstr.QuoteMeta(gconv.String(args[index]), `'`) + `'` } return gconv.String(args[index]) } diff --git a/database/gdb/gdb_mysql.go b/database/gdb/gdb_mysql.go index 2f60d9a07..08c15529e 100644 --- a/database/gdb/gdb_mysql.go +++ b/database/gdb/gdb_mysql.go @@ -24,7 +24,7 @@ func (db *dbMysql) Open(config *ConfigNode) (*sql.DB, error) { if config.LinkInfo != "" { source = config.LinkInfo } else { - source = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&multiStatements=true", + source = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&multiStatements=true&parseTime=true&loc=Local", config.User, config.Pass, config.Host, config.Port, config.Name, config.Charset) } if db, err := sql.Open("gf-mysql", source); err == nil {