在做一个小项目的时候,需要使用go从数据库里面读取时间信息,但是总会出错,在网上查了查,发现还是挺容易解决的。

原来的代码写的很简单,就是直接open一个数据库,写入就结束了,然后直接从数据库里面读取出来。
数据库的结构是这个样子的

CREATE TABLE `comment` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `UName` varchar(128) NOT NULL DEFAULT 'NULL',
  `Content` text NOT NULL,
  `CommentTime` datetime NOT NULL,
  `CommentType` int(11) NOT NULL,
  `IP` varchar(64) DEFAULT NULL,
  `UA` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;

写入的代码是这个样子的

func Modify(modify string, cond ...interface{}) (error) {
    db, err := sql.Open("mysql", "root:password@/database?charset=utf8")
    if err != nil {
        return err
    }
    defer db.Close()

    stmt, err := db.Prepare(modify)
    if err != nil {
        return err
    }

    res, err := stmt.Exec(cond...)
    if err != nil {
        return err
    }

    _, err = res.LastInsertId()
    if err != nil {
        return err
    }
    return nil

}

然后读取的方式可以看go读取数据这篇文章
结果数据内容很奇怪,从数据库直接看到的内容是没什么错误的
写入时间
注意,这个地方时间跟东8区差了好几个小时
结果,最重要的是,我读取出来的时间完全没有了
读取时间
最后在网上查了一下,是由于golang的设计跟mysql设计的冲突,只需要在创建连接的时候加上参数就好啦
就像是这样打开

db, err := sql.Open("mysql", "root:password@/database?charset=utf8&loc=Asia%2FShanghai&parseTime=true")

就是加上两个参数&loc=Asia%2FShanghai&parseTime=true时区和parseTime参数
这下子读取的数据信息就都正确了
加参数
这篇博客文章写的好水。。

mysql golang

发表新评论