diff --git a/database/gdb/gdb_driver_mysql.go b/database/gdb/gdb_driver_mysql.go index b94b38443..609d274a0 100644 --- a/database/gdb/gdb_driver_mysql.go +++ b/database/gdb/gdb_driver_mysql.go @@ -31,6 +31,7 @@ func (d *DriverMysql) New(core *Core, node *ConfigNode) (DB, error) { } // Open creates and returns a underlying sql.DB object for mysql. +// Note that it converts time.Time argument to local timezone in default. func (d *DriverMysql) Open(config *ConfigNode) (*sql.DB, error) { var source string if config.LinkInfo != "" { @@ -41,7 +42,7 @@ func (d *DriverMysql) Open(config *ConfigNode) (*sql.DB, error) { } } else { source = fmt.Sprintf( - "%s:%s@tcp(%s:%s)/%s?charset=%s&multiStatements=true&parseTime=true", + "%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, ) } diff --git a/database/gdb/gdb_func.go b/database/gdb/gdb_func.go index d04b970cc..0a1130cad 100644 --- a/database/gdb/gdb_func.go +++ b/database/gdb/gdb_func.go @@ -658,9 +658,13 @@ func handleArguments(sql string, args []interface{}) (newSql string, newArgs []i newArgs = append(newArgs, arg) continue - // Special handling for gtime.Time. + // Special handling for gtime.Time/*gtime.Time. case gtime.Time: - newArgs = append(newArgs, v.String()) + newArgs = append(newArgs, v.Time) + continue + + case *gtime.Time: + newArgs = append(newArgs, v.Time) continue default: diff --git a/database/gdb/gdb_z_mysql_model_test.go b/database/gdb/gdb_z_mysql_model_test.go index b480e2743..2086b673f 100644 --- a/database/gdb/gdb_z_mysql_model_test.go +++ b/database/gdb/gdb_z_mysql_model_test.go @@ -2841,7 +2841,7 @@ func Test_Model_HasField(t *testing.T) { func Test_Model_Issue1002(t *testing.T) { table := createTable() defer dropTable(table) - + db.SetDebug(true) result, err := db.Table(table).Data(g.Map{ "id": 1, "passport": "port_1", @@ -2901,9 +2901,27 @@ func Test_Model_Issue1002(t *testing.T) { t.Assert(err, nil) t.Assert(v.Int(), 1) }) - // where + time.Time arguments. + // where + time.Time arguments, UTC. t1, _ := time.Parse("2006-01-02 15:04:05", "2020-10-27 19:03:32") t2, _ := time.Parse("2006-01-02 15:04:05", "2020-10-27 19:03:34") + gtest.C(t, func(t *gtest.T) { + v, err := db.Table(table).Fields("id").Where("create_time>? and create_time? and create_time? and create_time? and create_time