有没有一种方法可以像NoSQL一样在MySQL中搜索JSON字段?我的意思是,如果我在一个VARCHAR字段中存储,比如说,"{name: 'John', surname: 'Doe', age:'30'}",我是否可以选择并过滤它,比如
SELECT my_json_field FROM my_table where my_json_field.name = 'John'问候
发布于 2012-11-26 19:33:44
没有这回事。MySQL就是不理解JSON,写正则表达式匹配或其他任何东西都是自找麻烦。
发布于 2012-08-23 20:59:37
为什么不这样:
SELECT my_json_field FROM my_table where my_json_field LIKE '% name:\'John\' %'或者更一般的,这取决于my_json_field的结构
SELECT my_json_field FROM my_table where my_json_field LIKE '% name: \'John\' %'发布于 2012-08-23 21:25:50
使用like操作符实现这样的功能可能会降低性能。为此,我建议使用MySQL fulltext search而不是like。
create table my_table (my_json_field text);
ALTER TABLE my_table ADD FULLTEXT(my_json_field);
insert into my_table (my_json_field) values ("{name: 'John', surname: 'Doe', age:'30'}");
insert into my_table (my_json_field) values ("{name: 'Pope', surname: 'Benedict', age:'666'}");
select *
from my_table
where MATCH(my_json_field) AGAINST ("Pope" IN BOOLEAN MODE);
'{name: ''Pope'', surname: ''Benedict'', age:''666''}'
select *
from my_table
where MATCH(my_json_field) AGAINST ("John" IN BOOLEAN MODE);
'{name: ''John'', surname: ''Doe'', age:''30''}'您可能注意到,我没有将‘stopword’文件名添加到查询中,因为它是一个名称(在搜索词中被忽略)。
此外,如果您想搜索"fieldname:'value'“对,则必须找到一种处理特殊字符的方法。
https://stackoverflow.com/questions/12092120
复制相似问题