我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)
jma*_*ney 36
在我的代码中,我有一个将字符串转换为的函数 sql.NullString
func NewNullString(s string) sql.NullString {
if len(s) == 0 {
return sql.NullString{}
}
return sql.NullString{
String: s,
Valid: true,
}
}
Run Code Online (Sandbox Code Playgroud)
然后每当我使用时,我使用Exec该NewNullString函数包装在DB中可能为NULL的字符串.
db.Exec(`
insert into
users first_name, last_name, email
values (?,?,?)`,
firstName,
lastName,
NewNullString(email),
)
Run Code Online (Sandbox Code Playgroud)
cap*_*aig 12
该database/sql包具有适用于这种情况的NullString类型(docs).
基本上只是用来sql.NullString代替你希望它们在db中可以为空的字符串.
您也可以*string在代码中使用a 来获得相同的效果.
在任何一种情况下的问题都是映射到可空字符串/从可空字符串到非可空字符串.空字符串在技术上是一个值,所以如果你决定将空字符串转换为nil,你几乎总是必须做这样的事情:
nullableS := &s
if s == "" {
nullableS = nil
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是在整个应用程序中使用*string而不是string在模型中使用.
在数据库中,我一直采用空字符串和null等效的方法,只是在数据库中存储空sting,并使大多数列不可为空.