diff --git a/cdc/sink/codec/avro.go b/cdc/sink/codec/avro.go index e72264e1191..1d6452975ff 100644 --- a/cdc/sink/codec/avro.go +++ b/cdc/sink/codec/avro.go @@ -484,6 +484,9 @@ func columnToAvroNativeData(col *model.Column, tz *time.Location) (interface{}, case mysql.TypeBit: return handleUnsignedInt64() case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24: + if col.Flag.IsUnsigned() { + return int32(col.Value.(uint64)), "int", nil + } return int32(col.Value.(int64)), "int", nil case mysql.TypeLong: if col.Flag.IsUnsigned() { diff --git a/cdc/sink/codec/avro_test.go b/cdc/sink/codec/avro_test.go index 66100cbd9f5..97074664fa8 100644 --- a/cdc/sink/codec/avro_test.go +++ b/cdc/sink/codec/avro_test.go @@ -195,6 +195,7 @@ func (s *avroBatchEncoderSuite) TestAvroEncode(c *check.C) { {Name: "id", Type: mysql.TypeLong, Flag: model.HandleKeyFlag, Value: int64(1)}, {Name: "name", Type: mysql.TypeVarchar, Value: "Bob"}, {Name: "tiny", Type: mysql.TypeTiny, Value: int64(255)}, + {Name: "utiny", Type: mysql.TypeTiny, Flag: model.UnsignedFlag, Value: uint64(100)}, {Name: "comment", Type: mysql.TypeBlob, Value: []byte("测试")}, }, }