xorm 更新空值时,未更新

Xorm更新Mysql数据库 结构体内的0值数据未更新

问题

使用xorm更新mysql数据

session.Where("id=?", data.ID).Update(&data)

发现结构体data中其他数据更新了 但0值字段没有更新到数据库中。

解决

  1. 在更新前 打印了data数据 没有问题

  2. 开启SQL语句打印

    xormEngine.ShowSQL(true)
    

    在打印出来的SQL更新语句中 发现了0值字段并没有更新 并且字符串为"“的字段也没有更新

  3. 查询xorm文档

    func(*Session) Update()
    func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int64, error)
    

    Update records, bean’s non-empty fields are updated contents, condiBean’ non-empty fileds are conditions CAUTION: bool will defaultly be updated content nor conditions. You should call UseBool if you have bool to use. float32 & float64 may be not inexact as condtions. 的确说明了 更新非空字段 所以说如果是空字段 无法更新

  4. 解决方案 在update中找到了一条说明: Update: update one or more records, default will update non-empty and non-zero fields except when you use Cols, AllCols and so on. 更新一条或多条记录,默认会更新非空和非零字段,除非使用 Cols、AllCols 等 所以 方法找到了 对于更新所有字段的使用allcols

    session.Where("id=?", data.ID).AllCols().Update(&data)