巨人的肩膀
mysql支持原生json使用说明
背景:
t表有个json类型的字段f,需查询出:f字段值为 ‘{“id”:1}’ 的数据
结论
需用cast转换入参为json:
select * from t where f = cast('{"id":1}' as json);
准备环境
- 表结构
create table t(
id int auto_increment primary key,
name varchar(10),
f json
);
- 初始化数据
insert into t(name, f) values('name-1', '{"id":1}');
insert into t(name, f) values('name-2', '{"id":2}');
insert into t(name, f) values('name-3', '{"id":1}');
查询
1、使用cast转换后匹配【可】:
select * from t where f = cast('{"id":1}' as json);
原因:通过cast将入参转换为json类型,即可比较
注意事项:
- cast转换需保证参数为合法json字符串,否则会报错
- cast存在转换消耗
- 此查询会扫全表,建议加上有索引的字段作为查询条件,走索引提升效率
2、直接用“=”符号匹配【不可】:
select * from t where f = '{"id":1}';
原因:JSON 不同于字符串,所以如果用字符串和 JSON 字段比较,是不会相等的