MySQL json字段 全值(全字符串)查询

巨人的肩膀

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 字段比较,是不会相等的

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值