diff --git a/element/column.go b/element/column.go index 789017c..15f5e21 100644 --- a/element/column.go +++ b/element/column.go @@ -186,6 +186,7 @@ func (c Column) pkDefinition(isPrev bool) (string, bool) { strSql := " " + c.typeDefinition(isPrev) isPrimaryKey := false + hasComment := false for _, opt := range attr.Options { if opt.Tp == ast.ColumnOptionPrimaryKey { isPrimaryKey = true @@ -248,7 +249,14 @@ func (c Column) pkDefinition(isPrev bool) (string, bool) { if opt.Tp == ast.ColumnOptionDefaultValue { optStr = strings.ReplaceAll(optStr, "DEFAULT _UTF8MB4", "DEFAULT ") } - strSql += " " + optStr + + if !hasComment { + strSql += " " + optStr + } + + if opt.Tp == ast.ColumnOptionComment { + hasComment = true + } } return strSql, isPrimaryKey diff --git a/element/table.go b/element/table.go index b9a32d6..7e4c342 100644 --- a/element/table.go +++ b/element/table.go @@ -262,18 +262,40 @@ func (t Table) getIndexForeignKey(fkName string) int { } func hasChangedMysqlOptions(new, old []*ast.ColumnOption) bool { - if len(new) != len(old) { + optNew := make([]*ast.ColumnOption, 0, len(new)) + hasComment := false + for _, v := range new { + if !hasComment { + optNew = append(optNew, v) + } + if v.Tp == ast.ColumnOptionComment { + hasComment = true + } + } + + optOld := make([]*ast.ColumnOption, 0, len(old)) + hasComment = false + for _, v := range old { + if !hasComment { + optOld = append(optOld, v) + } + if v.Tp == ast.ColumnOptionComment { + hasComment = true + } + } + + if len(optNew) != len(optOld) { return true } mNew := map[ast.ColumnOptionType]int{} - for i := range old { - mNew[old[i].Tp] += 1 + for i := range optNew { + mNew[optNew[i].Tp] += 1 } mOld := map[ast.ColumnOptionType]int{} - for i := range old { - mOld[old[i].Tp] += 1 + for i := range optOld { + mOld[optOld[i].Tp] += 1 } for k, v := range mOld {