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

Dan*_*der 5 mysql go

使用sql数据库驱动程序

我一直在引用上面的帖子.但令人不安的是做一个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)
Run Code Online (Sandbox Code Playgroud)

spe*_*593 10

NOW()需要在SQL文本的一部分,它不是一个绑定值.

INSERT userinfo SET username=?,departname=?,created=NOW()
Run Code Online (Sandbox Code Playgroud)

你对它进行编码的方式,MySQL看作"NOW()"是一个文字字符串,好像它是任何旧的字符串一样'foo'.MySQL正在将该字符串值转换为DATETIME(MySQL期望格式接近'YYYY-MM-DD HH:MM:SS',并且它无法将其转换为有效日期.我们期望像您看到的那样是NULL或特殊的"零日期".


Sha*_*ews 6

这是另一个对我有用的解决方案.

var datetime = time.Now()
datetime.Format(time.RFC3339)
_, err = DatabaseHandle.Exec("INSERT into userinfo(id, date) VALUES (?,?)", 0, datetime)
Run Code Online (Sandbox Code Playgroud)

  • [Time.Format](https://golang.org/pkg/time/#Time.Format)返回一个字符串,所以你应该做`datetime:= time.Now().格式(time.RFC3339)`而不是调用它并忽略返回值 (5认同)
  • 请注意,这将设置运行go代码的服务器的当前时间,这可能与MySQL服务器不同(可能不是同一时区等) (3认同)