使用带有Go的now()来插入日期时间

时间:2014-05-01 20:01:09

标签: mysql go

Using sql database driver

我一直在引用上面的帖子。但令人不安的是做一个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)

2 个答案:

答案 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)