diff --git a/ddl/column_type_change_test.go b/ddl/column_type_change_test.go index 2fed091c5be3f..467d0f7eab34b 100644 --- a/ddl/column_type_change_test.go +++ b/ddl/column_type_change_test.go @@ -619,7 +619,7 @@ func TestColumnTypeChangeFromStringToOthers(t *testing.T) { tk.MustExec("alter table t modify txt json") tk.MustExec("alter table t modify e json") tk.MustExec("alter table t modify s json") - tk.MustQuery("select * from t").Check(testkit.Rows("{\"k1\": \"value\"} {\"k1\": \"value\"} {\"k1\": \"value\"} {\"k1\": \"value\"} {\"k1\": \"value\"} {\"k1\": \"value\"} \"{\\\"k1\\\": \\\"value\\\"}\" \"{\\\"k1\\\": \\\"value\\\"}\"")) + tk.MustQuery("select * from t").Check(testkit.Rows("{\"k1\": \"value\"} {\"k1\": \"value\"} {\"k1\": \"value\"} {\"k1\": \"value\"} {\"k1\": \"value\"} {\"k1\": \"value\"} {\"k1\": \"value\"} {\"k1\": \"value\"}")) reset(tk) tk.MustExec("insert into t values ('123x', 'x123', 'abc', 'datetime', 'timestamp', 'date', '123', '123')") @@ -651,7 +651,10 @@ func TestColumnTypeChangeFromStringToOthers(t *testing.T) { reset(tk) tk.MustExec("alter table t modify c char(15)") tk.MustExec("insert into t(c) values ('{\"k1\": \"value\"')") + tk.MustExec("insert into t(e, s) values ('str', 'str')") tk.MustGetErrCode("alter table t modify c json", errno.ErrInvalidJSONText) + tk.MustGetErrCode("alter table t modify e json", errno.ErrInvalidJSONText) + tk.MustGetErrCode("alter table t modify s json", errno.ErrInvalidJSONText) // MySQL will get "ERROR 1366 (HY000): Incorrect DECIMAL value: '0' for column '' at row -1" error. tk.MustExec("insert into t(vc) values ('abc')") diff --git a/types/datum.go b/types/datum.go index 41de0fa821a7d..7c08bea7a6666 100644 --- a/types/datum.go +++ b/types/datum.go @@ -1673,6 +1673,14 @@ func (d *Datum) convertToMysqlJSON(_ *stmtctx.StatementContext, _ *FieldType) (r if j, err = json.ParseBinaryFromString(d.GetString()); err == nil { ret.SetMysqlJSON(j) } + case KindMysqlSet, KindMysqlEnum: + var j json.BinaryJSON + var s string + if s, err = d.ToString(); err == nil { + if j, err = json.ParseBinaryFromString(s); err == nil { + ret.SetMysqlJSON(j) + } + } case KindInt64: i64 := d.GetInt64() ret.SetMysqlJSON(json.CreateBinary(i64))