巨人的肩膀

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}');

mysql json like查询 mysql查询json字段_字段

查询

1、使用cast转换后匹配【可】:

select * from t where f = cast('{"id":1}' as json);

mysql json like查询 mysql查询json字段_json_02


原因:通过cast将入参转换为json类型,即可比较

注意事项:

  • cast转换需保证参数为合法json字符串,否则会报错
  • cast存在转换消耗
  • 此查询会扫全表,建议加上有索引的字段作为查询条件,走索引提升效率

2、直接用“=”符号匹配【不可】:

select * from t where f = '{"id":1}';

mysql json like查询 mysql查询json字段_mysql_03


原因:JSON 不同于字符串,所以如果用字符串和 JSON 字段比较,是不会相等的