我正在尝试使用golang向mysql数据库中插入数据。在我的值采用空字符串的情况下,我希望插入一个null。如何调整以下代码以插入空值而不是空字符串?谢谢。
_, err := m.Db.Exec(`INSERT INTO
visitor_events
(type,
info,
url_path,
visitor_id,
created_at,
domain)
VALUES
(?, ?, ?, ?, ?, ?)`,
m.SaveEventType(ve), ve.EventInfo, m.SaveURLPath(ve.UrlPath), ve.VisitorId, time.Now().UTC(), ve.Domain)发布于 2016-10-27 01:15:05
在我的代码中,我有一个将字符串转换为sql.NullString的函数
func NewNullString(s string) sql.NullString {
if len(s) == 0 {
return sql.NullString{}
}
return sql.NullString{
String: s,
Valid: true,
}
}然后,每当我使用Exec时,我都会用NewNullString函数包装数据库中可能为NULL的字符串。
db.Exec(`
insert into
users first_name, last_name, email
values (?,?,?)`,
firstName,
lastName,
NewNullString(email),
)发布于 2016-10-26 23:46:33
对于这种情况,database/sql包有一个NullString类型(docs)。
基本上,只要在db中希望字符串为空的地方使用sql.NullString就可以了。
您也可以在代码中使用*string来达到同样的效果。
无论哪种情况,问题都在于将可空字符串映射到非可空字符串。从技术上讲,空字符串是一个值,所以如果您决定将空字符串转换为nil,则几乎总是必须执行以下操作:
nullableS := &s
if s == "" {
nullableS = nil
}另一种选择是在整个应用程序的模型中使用*string而不是string。
在数据库中,我一直采用的方法是空字符串和null是等价的,只是将空字符串存储在数据库中,并使大多数列不可为空。
发布于 2021-12-23 11:50:15
https://stackoverflow.com/questions/40266633
复制相似问题