diff --git a/ddl/column_test.go b/ddl/column_test.go index ad1ff52c16465..bfd8f04990727 100644 --- a/ddl/column_test.go +++ b/ddl/column_test.go @@ -1162,6 +1162,9 @@ func (s *testColumnSuite) TestModifyColumn(c *C) { {"decimal(2,1)", "decimal(3,2)", errUnsupportedModifyColumn.GenWithStackByArgs("can't change decimal column precision")}, {"decimal(2,1)", "decimal(2,2)", errUnsupportedModifyColumn.GenWithStackByArgs("can't change decimal column precision")}, {"decimal(2,1)", "decimal(2,1)", nil}, + {"decimal(2,1)", "int", errUnsupportedModifyColumn.GenWithStackByArgs("type int(11) not match origin decimal(2,1)")}, + {"decimal", "int", errUnsupportedModifyColumn.GenWithStackByArgs("type int(11) not match origin decimal(11,0)")}, + {"decimal(2,1)", "bigint", errUnsupportedModifyColumn.GenWithStackByArgs("type bigint(20) not match origin decimal(2,1)")}, } for _, tt := range tests { ftA := s.colDefStrToFieldType(c, tt.origin) diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 3c2594015d435..be9ace8ee9edb 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -3237,6 +3237,9 @@ func CheckModifyTypeCompatible(origin *types.FieldType, to *types.FieldType) (al } } case mysql.TypeNewDecimal: + if origin.Tp != to.Tp { + return "", errUnsupportedModifyColumn.GenWithStackByArgs(unsupportedMsg) + } // The root cause is modifying decimal precision needs to rewrite binary representation of that decimal. if to.Flen != origin.Flen || to.Decimal != origin.Decimal { return "", errUnsupportedModifyColumn.GenWithStackByArgs("can't change decimal column precision")