diff --git a/dialect/sql/schema/schema.go b/dialect/sql/schema/schema.go index a423af05d..2027943b9 100644 --- a/dialect/sql/schema/schema.go +++ b/dialect/sql/schema/schema.go @@ -693,7 +693,7 @@ func parseVersion(v string) (*version, bool) { if i == len(parts) { break } - if *e, err = strconv.Atoi(parts[i]); err != nil { + if *e, err = strconv.Atoi(strings.Split(parts[i], "-")[0]); err != nil { return nil, false } } diff --git a/dialect/sql/schema/schema_test.go b/dialect/sql/schema/schema_test.go index 2d77a932d..9496fac10 100644 --- a/dialect/sql/schema/schema_test.go +++ b/dialect/sql/schema/schema_test.go @@ -93,3 +93,20 @@ func TestColumn_ScanDefault(t *testing.T) { require.Equal(t, false, c1.Default) require.Error(t, c1.ScanDefault("foo")) } + +func TestColumn_MySQLType(t *testing.T) { + c1 := &Column{Type: field.TypeString, Unique: true} + require.Equal(t, "varchar(191)", c1.MySQLType("5.5")) + require.Equal(t, "varchar(191)", c1.MySQLType("5.6.1")) + require.Equal(t, "varchar(191)", c1.MySQLType("5.6.8")) + require.Equal(t, "varchar(255)", c1.MySQLType("5.7")) + require.Equal(t, "varchar(255)", c1.MySQLType("5.7.0")) + require.Equal(t, "varchar(255)", c1.MySQLType("5.7.26-log")) + require.Equal(t, "varchar(255)", c1.MySQLType("8-log")) + + c1 = &Column{Type: field.TypeJSON} + require.Equal(t, "json", c1.MySQLType("5.7.8")) + require.Equal(t, "json", c1.MySQLType("5.7.8-log")) + require.Equal(t, "longblob", c1.MySQLType("5.5")) + require.Equal(t, "longblob", c1.MySQLType("5.7")) +}