美文网首页
golang mysql datetime 类型字段读取到 0

golang mysql datetime 类型字段读取到 0

作者: 十年磨一剑1111 | 来源:发表于2021-06-19 18:00 被阅读0次

    最近在项目中有遇到过一个问题就是golang 在读取mysql 数据库时有个时间字段读出来的是0001-00-00 00:00:00 值,实际数据库里面确实0000-00-00 00:00:00,有点不太明白这是啥原因,考虑到我使用的是框架,于是使用原生的代码执行了一下,代码如下:

    import (
            "fmt"
            _ "github.com/go-sql-driver/mysql"
            "github.com/jinzhu/gorm"
    )
    
    type UserLoginLog struct {
            UserId     string
            CreateTime string
            LastTime   string
    }
    
    func main() {
            //fmt.Println("vim-go")
            db, err := gorm.Open("mysql", "dm:Xiaoxia@2021@tcp(175.24.110.203:3306)/DataManager?charset=utf8")
            if err != nil {
                    fmt.Println(err.Error())
            }
            if db == nil {
                    fmt.Println("数据库连接失败")
            }
            res := []UserLoginLog{}
            _ = db.Debug().Raw("select user_id,create_time,last_time from sys_login_log").Scan(&res)
            fmt.Println(res)
    
    }
    

    运行结果:


    res.png

    发现这样写是对的,和数据库里面的数据是一致的,可是我的项目也是使用的也是gorm哦,于是想到是不是这框架(gin-vue-admin)做了啥特殊处理,再结合下百度,发现是在连接mysql的时候多加了个参数parseTime=true 才导致这样的,于是笔者先做了下测试:

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        t, _ := time.ParseInLocation("2006-01-02 15:04:05", "0000-00-00 00:00:00", time.Local)
        fmt.Println("t:", t)
    
    }
    

    运行结果:


    res.png

    从运行结果来看:golang在解析时间为0000-00-00 00:00:00 字符串的时候是会转成0001-01-01 00:00:00 这种时间

    如何去判断呢? 笔者找到一个方法就是t.IsZero() 方法来判断这个日期是不是零值,如果是零值可以返回一个空字符串或者是正常的0000-00-00 00:00:00 这种时间。

    好了,今天的文章就写到这里了,有不对的地方欢迎小伙伴在下面给我留言,看到会及时回复的。

    相关文章

      网友评论

          本文标题:golang mysql datetime 类型字段读取到 0

          本文链接:https://www.haomeiwen.com/subject/owkdyltx.html