diff --git a/executor/aggfuncs/func_count.go b/executor/aggfuncs/func_count.go index 50e0b592f8c0b..e5033c9399c5f 100644 --- a/executor/aggfuncs/func_count.go +++ b/executor/aggfuncs/func_count.go @@ -10,6 +10,8 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/chunk" + "github.com/pingcap/tidb/util/codec" + "github.com/pingcap/tidb/util/hack" "github.com/pingcap/tidb/util/set" ) @@ -329,7 +331,7 @@ func (e *countOriginalWithDistinct) evalAndEncode( if err != nil || isNull { break } - encodedBytes = appendString(encodedBytes, buf, val) + encodedBytes = codec.EncodeBytes(encodedBytes, hack.Slice(val)) default: return nil, false, errors.Errorf("unsupported column type for encode %d", tp) } diff --git a/executor/aggregate_test.go b/executor/aggregate_test.go index f5ff52767b33a..ca7be96959c41 100644 --- a/executor/aggregate_test.go +++ b/executor/aggregate_test.go @@ -694,3 +694,11 @@ func (s *testSuite1) TestAggJSON(c *C) { `"hello"`, )) } + +func (s *testSuite1) TestIssue10099(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a char(10), b char(10))") + tk.MustExec("insert into t values('1', '222'), ('12', '22')") + tk.MustQuery("select count(distinct a, b) from t").Check(testkit.Rows("2")) +}