case 执行过程与mysql的差异

tidb版本:4.0.0

Bug 反馈
在mysql5.7及tidb中建表写入以下数据:
msg type
{“data”: {“msg”: “test1”}} 1
{“data”: {“msg”: “{“content”:“test2”}”}} 2

CREATE TABLE json_extract_use_case_test (
id int(11) NOT NULL AUTO_INCREMENT,
type int(255) DEFAULT NULL,
msg json DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
写入上述数据:
INSERT INTO test.json_extract_use_case_test(id, type, msg) VALUES (1, 1, ‘{“data”: {“msg”: “test1”}}’);
INSERT INTO test.json_extract_use_case_test(id, type, msg) VALUES (2, 2, ‘{“data”: {“msg”: “{\“content\”:\“test2\”}”}}’);

在mysql中执行以下语句:
select case
when type = 2 then json_extract(json_unquote(json_extract(msg, ‘$.data.msg’)), ‘$.content’)
else msg
end msg
from json_extract_use_case_test
可以正常执行;

在tidb中执行该条语句,报错如下:
3140 - Invalid JSON text: The document root must not be followed by other values.

结论:
在tidb中执行json_extract时,似乎未按照when的条件来判断执行。

参考一下这个帖子,感觉是存在特殊字符的原因

1 个赞