diff --git a/expression/builtin_math.go b/expression/builtin_math.go index 4d30548c06a4a..41d976ee3df11 100644 --- a/expression/builtin_math.go +++ b/expression/builtin_math.go @@ -1142,6 +1142,7 @@ func (c *convFunctionClass) getFunction(ctx sessionctx.Context, args []Expressio if err != nil { return nil, err } + bf.tp.Charset, bf.tp.Collate = ctx.GetSessionVars().GetCharsetInfo() bf.tp.Flen = 64 sig := &builtinConvSig{bf} sig.setPbCode(tipb.ScalarFuncSig_Conv) diff --git a/expression/collation.go b/expression/collation.go index 9c7f7345eb7c7..4163c670513fd 100644 --- a/expression/collation.go +++ b/expression/collation.go @@ -151,7 +151,7 @@ func deriveCoercibilityForScarlarFunc(sf *ScalarFunction) Coercibility { if sf.RetType.EvalType() != types.ETString { return CoercibilityNumeric } - coer := CoercibilityIgnorable + coer := CoercibilityCoercible for _, arg := range sf.GetArgs() { if arg.Coercibility() < coer { coer = arg.Coercibility() @@ -178,7 +178,7 @@ func deriveCoercibilityForColumn(c *Column) Coercibility { // DeriveCollationFromExprs derives collation information from these expressions. func DeriveCollationFromExprs(ctx sessionctx.Context, exprs ...Expression) (dstCharset, dstCollation string) { - curCoer := CoercibilityCoercible + curCoer := CoercibilityIgnorable curCollationPriority := -1 dstCharset, dstCollation = charset.GetDefaultCharsetAndCollate() if ctx != nil && ctx.GetSessionVars() != nil { diff --git a/expression/integration_test.go b/expression/integration_test.go index ce8c0f58e8ecc..a55e2c2e567a1 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -7668,3 +7668,13 @@ func (s *testIntegrationSuite) TestIssue11333(c *C) { tk.MustQuery(`select 0.0000000000000000000000000000000000000000000000000000000000000000000000012;`).Check(testkit.Rows("0.000000000000000000000000000000000000000000000000000000000000000000000001")) tk.MustQuery(`select 0.000000000000000000000000000000000000000000000000000000000000000000000001;`).Check(testkit.Rows("0.000000000000000000000000000000000000000000000000000000000000000000000001")) } + +func (s *testIntegrationSerialSuite) TestIssue19116(c *C) { + collate.SetNewCollationEnabledForTest(true) + defer collate.SetNewCollationEnabledForTest(false) + + tk := testkit.NewTestKit(c, s.store) + tk.MustQuery("select collation(concat(NULL,NULL));").Check(testkit.Rows("binary")) + tk.MustQuery("select coercibility(concat(1,1));").Check(testkit.Rows("4")) + tk.MustQuery("select coercibility(1);").Check(testkit.Rows("5")) +}