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),
)