我尝试使用golang将数据插入mysql数据库。如果我的值是一个空字符串,我想插入一个null。如何调整以下内容以插入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)
5条答案
按热度按时间ktecyv1j1#
在我的代码中,我有一个将字符串转换为
sql.NullString
的函数然后,每当我使用
Exec
时,我都会用NewNullString
函数 Package 数据库中可能为NULL的字符串。pgx2nnw82#
database/sql
包有一个NullString
类型(docs),用于这种情况。基本上,只要使用
sql.NullString
来代替你希望它们在db中为空的字符串。您也可以在代码中使用
*string
来达到相同的效果。在这两种情况下,问题都在于将可空字符串Map到不可空字符串/从可空字符串Map到不可空字符串。空字符串在技术上是一个值,所以如果你决定空字符串应该被转换为nil,你几乎总是必须这样做:
另一种选择是在整个应用程序的模型中使用
*string
而不是string
。在数据库中,我一直采用的方法是空字符串和null是等效的,只是将空字符串存储在数据库中,并使大多数列不可为空。
pb3skfrl3#
您也可以在SQL查询中使用
NULLIF
函数。NULLIF(?, '')
:当你尝试插入一个空字符串时,将返回NULL而不是空字符串。了解更多关于NULLIF:link
pbgvytdp4#
如果你想避免创建N个NewNullType函数,你最好使用pgx & pgtypes沿着Value()函数:
https://github.com/jackc/pgtype
https://github.com/jackc/pgtype/blob/master/text.go
示例(未测试)
4xrmg8kj5#
例如,添加NULL值mysql:isql:=InitSql(db,“INSERT INTO table(id,name)VALUES(:ID,:Name)”)AddParam(isql,“:ID”,1)AddParam(isql,“:Name”,nil)res,err:= SqlExec(isql)