首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种la NoSQL风格的MySQL

问一种la NoSQL风格的MySQL
EN

Stack Overflow用户
提问于 2012-08-23 20:57:36
回答 3查看 130关注 0票数 0

有没有一种方法可以像NoSQL一样在MySQL中搜索JSON字段?我的意思是,如果我在一个VARCHAR字段中存储,比如说,"{name: 'John', surname: 'Doe', age:'30'}",我是否可以选择并过滤它,比如

代码语言:javascript
复制
SELECT my_json_field FROM my_table where my_json_field.name = 'John'

问候

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-26 19:33:44

没有这回事。MySQL就是不理解JSON,写正则表达式匹配或其他任何东西都是自找麻烦。

票数 0
EN

Stack Overflow用户

发布于 2012-08-23 20:59:37

为什么不这样:

代码语言:javascript
复制
 SELECT my_json_field FROM my_table where my_json_field LIKE '% name:\'John\' %'

或者更一般的,这取决于my_json_field的结构

代码语言:javascript
复制
 SELECT my_json_field FROM my_table where my_json_field LIKE '% name: \'John\' %'
票数 1
EN

Stack Overflow用户

发布于 2012-08-23 21:25:50

使用like操作符实现这样的功能可能会降低性能。为此,我建议使用MySQL fulltext search而不是like。

代码语言:javascript
复制
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'“对,则必须找到一种处理特殊字符的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12092120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档