【注意】最后更新于 June 15, 2018,文中内容可能已过时,请谨慎使用。
在做一个小项目的时候,需要使用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参数
这下子读取的数据信息就都正确了
这篇博客文章写的好水。。