GORM Playground Link

https://github.com/go-gorm/playground/pull/486

Description

使用 Find 扫描数据到结构体切片,如果结构体字段类型为 string,数据库字段值为 NULL,得到的结构体字段值将是上一个不为 NULL 的值。

    users := [...]User{{Name: "NOT_NULL"}, {Age: 18}}
    DB.Create(&users)
    // INSERT INTO "users" ("created_at","updated_at","deleted_at","name","age","birthday","company_id","manager_id","active") OUTPUT INSERTED."id" VALUES
    // ('2022-06-29 18:36:12.292','2022-06-29 18:36:12.292',NULL,'NOT_NULL',0,NULL,NULL,NULL,0),
    // ('2022-06-29 18:36:12.292','2022-06-29 18:36:12.292',NULL,'',18,NULL,NULL,NULL,0);
    for _, u := range users {
        t.Logf("user id is [%d], username is [%s]", u.ID, u.Name)
    }

    targetID := users[1].ID
    // Set the target field value to NULL
    DB.Model(&User{}).Where(&User{Model: gorm.Model{ID: targetID}}).UpdateColumn("name", nil)
    // UPDATE "users" SET "name"=NULL WHERE "users"."id" = 3 AND "users"."deleted_at" IS NULL

    var data []User
    DB.Model(&User{}).Find(&data)
    // SELECT * FROM "users" WHERE "users"."deleted_at" IS NULL

    for _, item := range data {
        t.Logf("user id is [%d], username is [%s]", item.ID, item.Name)
        if item.ID == targetID && item.Name != "" {
            t.Errorf("The username with id [%d] should be empty!", item.ID)
        }
    }
    //    user id is [1], username is [jinzhu]
    //    user id is [2], username is [NOT_NULL]
    //    user id is [3], username is [NOT_NULL]
    //    The username with id [3] should be empty!

Comment From: a631807682

duplicated of https://github.com/go-gorm/gorm/issues/5415