MySQL json提取/搜索不匹配

时间:2017-11-17 08:11:20

标签: mysql json

这让我发疯了。 有人可以解释,为什么第一个调用返回一个路径,但是从表中选择路径时,没有找到路径?

(MySQL-Version 5.7.20)

按预期工作:

SELECT JSON_SEARCH(
  '{"mm": [{"id":"1","field":"test","value":33}]}',
  'one', '1', null, '$.mm[*].id') as path;
  -- output: path== "$.mm[0].id"

不工作:

drop table test;
create table test(
    id int primary key,
    data json
);

insert into test (id, data) values (1, '{}');
update test set data=JSON_SET(data, '$.mm', json_array()) where id=1;
update test set data=JSON_ARRAY_APPEND(data, '$.mm', '{"id":"1","field":"test","value":33}') where id=1;
SELECT JSON_SEARCH(data, 'one', '1', null, '$.mm[*].id') as path from test where id=1;
-- output: path==NULL
-- expected: path== "$.mm[0].id"

很确定我在这里做了一些错误,但我无法弄清楚哪一个......

谢谢

1 个答案:

答案 0 :(得分:0)

得到了...... 必须将字符串强制转换为json才能在表中包含对象类型。这适用于追加和设置。使用JSON_SEARCH时,如果第一个参数是字符串,则会自动转换为json。