我一直在引用上面的帖子。但令人不安的是做一个INSERT语句,其中一个字段是datetime。我试着做“NOW()”但是当我检查mysql数据库时,我正在看到00:00:00。任何人都知道我可以使用什么作为正确插入日期时间的值?
另外 - 我知道我可以使用go的时间包构建日期时间,但我不想使用运行Go的机器的时间戳。我想要运行mysql的机器的日期时间。亨西,为什么我用“NOW()”。
stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?")
checkErr(err)
res, err := stmt.Exec("reckhou", "IT", "NOW()")
checkErr(err)
id, err := res.LastInsertId()
checkErr(err)
fmt.Println(id)
答案 0 :(得分:10)
NOW()
需要成为SQL文本的一部分,它不是绑定值。
INSERT userinfo SET username=?,departname=?,created=NOW()
你编码的方式是,MySQL将"NOW()"
视为文字字符串,好像它是'foo'
这样的旧字符串。 MySQL正在将该字符串值转换为DATETIME(MySQL期望格式接近'YYYY-MM-DD HH:MM:SS'
,并且它无法将其转换为有效日期。我们期望是NULL还是特殊"零日期"就像你看到的一样。
答案 1 :(得分:6)
这是另一个对我有用的解决方案。
var datetime = time.Now()
datetime.Format(time.RFC3339)
_, err = DatabaseHandle.Exec("INSERT into userinfo(id, date) VALUES (?,?)", 0, datetime)