首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang在sql中插入NULL而不是空字符串

问Golang在sql中插入NULL而不是空字符串
EN

Stack Overflow用户
提问于 2016-10-26 23:44:08
回答 3查看 26.6K关注 0票数 33

我正在尝试使用golang向mysql数据库中插入数据。在我的值采用空字符串的情况下,我希望插入一个null。如何调整以下代码以插入空值而不是空字符串?谢谢。

代码语言:javascript
复制
_, 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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-27 01:15:05

在我的代码中,我有一个将字符串转换为sql.NullString的函数

代码语言:javascript
复制
func NewNullString(s string) sql.NullString {
    if len(s) == 0 {
        return sql.NullString{}
    }
    return sql.NullString{
         String: s,
         Valid: true,
    }
}

然后,每当我使用Exec时,我都会用NewNullString函数包装数据库中可能为NULL的字符串。

代码语言:javascript
复制
db.Exec(`
  insert into
      users first_name, last_name, email
      values (?,?,?)`,
  firstName,
  lastName,
  NewNullString(email),
)
票数 66
EN

Stack Overflow用户

发布于 2016-10-26 23:46:33

对于这种情况,database/sql包有一个NullString类型(docs)。

基本上,只要在db中希望字符串为空的地方使用sql.NullString就可以了。

您也可以在代码中使用*string来达到同样的效果。

无论哪种情况,问题都在于将可空字符串映射到非可空字符串。从技术上讲,空字符串是一个值,所以如果您决定将空字符串转换为nil,则几乎总是必须执行以下操作:

代码语言:javascript
复制
nullableS := &s
if s == "" {
  nullableS = nil
}

另一种选择是在整个应用程序的模型中使用*string而不是string。

在数据库中,我一直采用的方法是空字符串和null是等价的,只是将空字符串存储在数据库中,并使大多数列不可为空。

票数 16
EN

Stack Overflow用户

发布于 2021-12-23 11:50:15

您还可以在SQL查询中使用NULLIF函数。

NULLIF(?, ''):当您尝试插入空字符串时,将返回NULL而不是空字符串。

了解有关NULLIF的更多信息:link

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40266633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档