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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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;

写入的代码是这个样子的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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设计的冲突,只需要在创建连接的时候加上参数就好啦 就像是这样打开

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

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