diff --git a/ddl/column_test.go b/ddl/column_test.go index 704a61e2d33a3..9053afe395110 100644 --- a/ddl/column_test.go +++ b/ddl/column_test.go @@ -922,6 +922,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 5472fb1947069..bcb4ffce248a1 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -2469,6 +2469,9 @@ func modifiable(origin *types.FieldType, to *types.FieldType) error { } } 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")