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的条件来判断执行。