diff --git a/go/logic/inspect.go b/go/logic/inspect.go index e61f97b..4ad0131 100644 --- a/go/logic/inspect.go +++ b/go/logic/inspect.go @@ -187,6 +187,9 @@ func (this *Inspector) inspectOriginalAndGhostTables() (err error) { if column.Name == mappedColumn.Name && column.Type == sql.DateTimeColumnType && mappedColumn.Type == sql.TimestampColumnType { this.migrationContext.MappedSharedColumns.SetConvertDatetimeToTimestamp(column.Name, this.migrationContext.ApplierTimeZone) } + if column.Name == mappedColumn.Name && column.Type == sql.EnumColumnType && mappedColumn.Charset != "" { + this.migrationContext.MappedSharedColumns.SetEnumToTextConversion(column.Name) + } } for _, column := range this.migrationContext.UniqueKey.Columns.Columns() { diff --git a/go/sql/builder.go b/go/sql/builder.go index 4b019bc..4b970e9 100644 --- a/go/sql/builder.go +++ b/go/sql/builder.go @@ -108,6 +108,8 @@ func BuildSetPreparedClause(columns *ColumnList) (result string, err error) { var setToken string if column.timezoneConversion != nil { setToken = fmt.Sprintf("%s=convert_tz(?, '%s', '%s')", EscapeName(column.Name), column.timezoneConversion.ToTimezone, "+00:00") + } else if column.enumToTextConversion { + setToken = fmt.Sprintf("%s=concat('', ?)", EscapeName(column.Name)) } else if column.Type == JSONColumnType { setToken = fmt.Sprintf("%s=convert(? using utf8mb4)", EscapeName(column.Name)) } else { diff --git a/go/sql/types.go b/go/sql/types.go index ef83819..30db646 100644 --- a/go/sql/types.go +++ b/go/sql/types.go @@ -31,11 +31,12 @@ type TimezoneConversion struct { } type Column struct { - Name string - IsUnsigned bool - Charset string - Type ColumnType - timezoneConversion *TimezoneConversion + Name string + IsUnsigned bool + Charset string + Type ColumnType + timezoneConversion *TimezoneConversion + enumToTextConversion bool } func (this *Column) convertArg(arg interface{}) interface{} { @@ -179,6 +180,14 @@ func (this *ColumnList) HasTimezoneConversion(columnName string) bool { return this.GetColumn(columnName).timezoneConversion != nil } +func (this *ColumnList) SetEnumToTextConversion(columnName string) { + this.GetColumn(columnName).enumToTextConversion = true +} + +func (this *ColumnList) IsEnumToTextConversion(columnName string) bool { + return this.GetColumn(columnName).enumToTextConversion +} + func (this *ColumnList) String() string { return strings.Join(this.Names(), ",") }