diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index edf4630e03..77fa5897e8 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -760,15 +760,16 @@ func setSetDefaultValue(v types.Datum, col *table.Column) (string, error) { return str, nil } + ctor := collate.GetCollator(col.Collate) valMap := make(map[string]struct{}, len(col.Elems)) - dVals := strings.Split(strings.ToLower(str), ",") + dVals := strings.Split(str, ",") for _, dv := range dVals { - valMap[dv] = struct{}{} + valMap[string(ctor.Key(dv))] = struct{}{} } var existCnt int for dv := range valMap { for i := range col.Elems { - e := strings.ToLower(col.Elems[i]) + e := string(ctor.Key(col.Elems[i])) if e == dv { existCnt++ break diff --git a/expression/integration_test.go b/expression/integration_test.go index 19842a6553..97835c17a9 100755 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -6619,3 +6619,15 @@ func (s *testIntegrationSuite) TestIssue17287(c *C) { tk.MustQuery("execute stmt7 using @val1;").Check(testkit.Rows("1589873945")) tk.MustQuery("execute stmt7 using @val2;").Check(testkit.Rows("1589873946")) } + +func (s *testIntegrationSerialSuite) TestIssue17891(c *C) { + collate.SetNewCollationEnabledForTest(true) + defer collate.SetNewCollationEnabledForTest(false) + + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(id int, value set ('a','b','c') charset utf8mb4 collate utf8mb4_bin default 'a,b ');") + tk.MustExec("drop table t") + tk.MustExec("create table test(id int, value set ('a','b','c') charset utf8mb4 collate utf8mb4_general_ci default 'a,B ,C');") +}