diff --git a/migrator/migrator.go b/migrator/migrator.go index 95b2d75b..5ab1c126 100644 --- a/migrator/migrator.go +++ b/migrator/migrator.go @@ -449,11 +449,13 @@ func (m Migrator) MigrateColumn(value interface{}, field *schema.Field, columnTy } // check default value - if v, ok := columnType.DefaultValue(); ok && - utils.CheckColumnDefaultNull(v) != utils.CheckColumnDefaultNull(field.DefaultValue) { - // not primary key - if !field.PrimaryKey { - alterColumn = true + if v, ok := columnType.DefaultValue(); ok && v != field.DefaultValue { + // not all equal null + if !(utils.CheckColumnDefaultNull(v) && utils.CheckColumnDefaultNull(field.DefaultValue)) { + // not primary key + if !field.PrimaryKey { + alterColumn = true + } } } diff --git a/tests/migrate_test.go b/tests/migrate_test.go index 7ef81a35..9da9f3d7 100644 --- a/tests/migrate_test.go +++ b/tests/migrate_test.go @@ -687,7 +687,7 @@ func TestUniqueColumn(t *testing.T) { AssertEqual(t, true, DB.Migrator().HasIndex(&UniqueTest{}, "name")) AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest{}, "name_1")) AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest{}, "name_2")) - AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest{}, "name_2")) + AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest{}, "name_3")) type UniqueTest2 struct { ID string `gorm:"primary_key"` @@ -712,5 +712,5 @@ func TestUniqueColumn(t *testing.T) { AssertEqual(t, true, DB.Migrator().HasIndex(&UniqueTest2{}, "name")) AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest2{}, "name_1")) AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest2{}, "name_2")) - AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest2{}, "name_2")) + AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest2{}, "name_3")) } diff --git a/utils/utils.go b/utils/utils.go index 78af8d64..95ac4120 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -47,7 +47,7 @@ func CheckTruth(vals ...string) bool { } func CheckColumnDefaultNull(val string) bool { - if val == "" || !strings.EqualFold(val, "NULL") { + if val == "" || strings.EqualFold(val, "NULL") { return true } return false