数据库插入的时候怎么使用NULL而不是空字符串

我在执行如下的SQL的时候,有些字段可能为空,但是为空的时候数据库会插入一个空字符串,如果修改才能让他插入一个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) ```
已邀请:

stevewang

赞同来自: voidint

`database/sql`有一些可以处理null值的类型,如`NullString`、`NullBool`、`NullInt64`、`NullFloat64`。
表示数据库里貌似不应该有null值。。即使是字符串

云开 - DRY

我之前碰到过类似的问题,数据库表设计时候是null,go的sql查询为"",null行的数据好像查不出来。

caibirdme - a green bird

```
db.Query(`SELECT * FROM xxx where id > ? and some = ?`, id, nil)
```
这样就可以。`go-sql-driver/mysql`会把nil映射成NULL,源码截取:
```
arg := args[argPos]
argPos++

if arg == nil {
buf = append(buf, "NULL"...)
continue
}

switch v := arg.(type) {
//...
}
```

caibirdme - a green bird

虽然我也不知道为什么要用NULL,但是这么写就能拼出楼主想要的SQL

要回复问题请先登录注册