如何将time.Now()
保存在mysql表中,列名保存为created_at timestamp null
。
我收到错误:
Error:Error 1292: Incorrect datetime value: '2017-08-05 19:06:14.190 +0000' for column 'created_at' at row 1
fragmenta
cms,所以所有参考代码及其行号都在下面给出)表架构: -
mysql> describe users;
+----------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
| status | int(11) | YES | | NULL | |
| role | int(11) | YES | | NULL | |
| name | varchar(250) | YES | | NULL | |
| email | varchar(250) | YES | | NULL | |
| title | varchar(250) | YES | | NULL | |
| summary | text | YES | | NULL | |
| text | text | YES | | NULL | |
| image_id | int(11) | YES | | NULL | |
| password_hash | varchar(250) | YES | | NULL | |
| password_reset_token | text | YES | | NULL | |
| password_reset_at | timestamp | YES | | NULL | |
+----------------------+--------------+------+-----+---------+----------------+
运行它以保存的代码: -
在第号行。 62这里(https://github.com/fragmenta/fragmenta-cms/blob/master/src/pages/actions/setup.go#L62)
它调用代码
user := users.New()
在行号。 51 at file here(https://github.com/fragmenta/fragmenta-cms/blob/master/src/users/query.go#L51)
设置了 New()
功能。
这就像: -
func New() *User {
user := &User{}
user.CreatedAt = time.Now()
user.UpdatedAt = time.Now()
user.TableName = TableName
user.KeyName = KeyName
user.Status = status.Draft
return user
}
和他们的连接/ mysql开放模式位于此处(https://github.com/fragmenta/query/blob/master/adapters/database_mysql.go#L23)。
答案 0 :(得分:1)
您正尝试使用字符串query.go:36:
插入它now := query.TimeString(time.Now().UTC())
由您使用的包database.go:59生成:
return t.Format("2006-01-02 15:04:05.000 -0700")
MySQL期望它采用yyyy-MM-dd hh:mm:ss
模式,使用以下代码段将模式应用于当前Time.time
对象:
now := time.Now().UTC().Format("2006-01-02 03:04:05")
无论如何,为什么不在插入记录时使用SQL函数NOW()
?
答案 1 :(得分:1)
https://github.com/fragmenta/query
中存在错误。 TimeString
中的query/adapters/database.go
方法对所有DBMS适配器都无效。
// TimeString - given a time, return the standard string representation
func (db *Adapter) TimeString(t time.Time) string {
return t.Format("2006-01-02 15:04:05.000 -0700")
}
它对MySQL时间戳无效:MySQL 5.7 Reference Manual, 11.3.1 The DATE, DATETIME, and TIMESTAMP Types。 TimeString
中的MySQL query/adapters/database_mysql.go
方法应为:
// TimeString - given a time, return the MySQL standard string representation
func (db *MysqlAdapter) TimeString(t time.Time) string {
return t.Format("2006-01-02 15:04:05.999999")
}