diff --git a/tablecodec/tablecodec.go b/tablecodec/tablecodec.go index 9179955af674f..7c480d4ab8751 100644 --- a/tablecodec/tablecodec.go +++ b/tablecodec/tablecodec.go @@ -512,11 +512,11 @@ func unflatten(datum types.Datum, ft *types.FieldType, loc *time.Location) (type case mysql.TypeFloat: datum.SetFloat32(float32(datum.GetFloat64())) return datum, nil - case mysql.TypeVarchar, mysql.TypeString, mysql.TypeVarString: + case mysql.TypeVarchar, mysql.TypeString, mysql.TypeVarString, mysql.TypeTinyBlob, + mysql.TypeMediumBlob, mysql.TypeBlob, mysql.TypeLongBlob: datum.SetString(datum.GetString(), ft.Collate) case mysql.TypeTiny, mysql.TypeShort, mysql.TypeYear, mysql.TypeInt24, - mysql.TypeLong, mysql.TypeLonglong, mysql.TypeDouble, mysql.TypeTinyBlob, - mysql.TypeMediumBlob, mysql.TypeBlob, mysql.TypeLongBlob: + mysql.TypeLong, mysql.TypeLonglong, mysql.TypeDouble: return datum, nil case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeTimestamp: t := types.NewTime(types.ZeroCoreTime, ft.Tp, int8(ft.Decimal)) diff --git a/tablecodec/tablecodec_test.go b/tablecodec/tablecodec_test.go index b56c3cd6b9901..3a27b01ae8be9 100644 --- a/tablecodec/tablecodec_test.go +++ b/tablecodec/tablecodec_test.go @@ -175,6 +175,16 @@ func (s *testTableCodecSuite) TestUnflattenDatums(c *C) { cmp, err := input[0].CompareDatum(sc, &output[0]) c.Assert(err, IsNil) c.Assert(cmp, Equals, 0) + + input = []types.Datum{types.NewCollationStringDatum("aaa", "utf8mb4_unicode_ci", 0)} + tps = []*types.FieldType{types.NewFieldType(mysql.TypeBlob)} + tps[0].Collate = "utf8mb4_unicode_ci" + output, err = UnflattenDatums(input, tps, sc.TimeZone) + c.Assert(err, IsNil) + cmp, err = input[0].CompareDatum(sc, &output[0]) + c.Assert(err, IsNil) + c.Assert(cmp, Equals, 0) + c.Assert(output[0].Collation(), Equals, "utf8mb4_unicode_ci") } func (s *testTableCodecSuite) TestTimeCodec(c *C) {