transaction scan pure golang mysql go

mysql - scan - Golang Insert NULL en sql en lugar de una cadena vacía



scan golang db (2)

El paquete database/sql tiene un tipo NullString ( sql.NullString ) solo para esta situación.

Básicamente, simplemente use sql.NullString en lugar de cadenas donde desee que sean anulables en db.

También puede utilizar una *string en su código para el mismo efecto.

El problema en cualquier caso es en la asignación a / desde una cadena anulable a una cadena no anulable. La cadena vacía es técnicamente un valor, por lo que casi siempre tendrá que hacer algo como esto si decide que la cadena vacía se debe traducir a nil:

nullableS := &s if s == "" { nullableS = nil }

La alternativa sería simplemente usar *string lugar de string en sus modelos a lo largo de su aplicación.

En las bases de datos, he estado adoptando el enfoque de que la cadena vacía y la nula son equivalentes, y simplemente almacené la cadena vacía en la base de datos, y la mayoría de las columnas no son anulables.

Estoy tratando de insertar datos en una base de datos mysql usando golang. En el caso de que mi valor adquiera una cadena vacía, me gustaría insertar un nulo. ¿Cómo puedo ajustar lo siguiente para insertar nulos en lugar de una cadena vacía? Gracias.

_, 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 mi código tengo una función que convierte una cadena a sql.NullString

func NewNullString(s string) sql.NullString { if len(s) == 0 { return sql.NullString{} } return sql.NullString{ String: s, Valid: true, } }

Luego, cuando estoy usando Exec , envuelvo mis cadenas que podrían ser NULL en la base de datos con la función NewNullString .

db.Exec(` insert into users first_name, last_name, email values (?,?,?)`, firstName, lastName, NewNullString(email), )