解决方案: MySQL JSON字段匹配值忽略大小写不敏感匹配结果

您所在的位置:网站首页 mysql查询空的字段怎么写 解决方案: MySQL JSON字段匹配值忽略大小写不敏感匹配结果

解决方案: MySQL JSON字段匹配值忽略大小写不敏感匹配结果

2023-06-05 16:10| 来源: 网络整理| 查看: 265

问题背景

MySQL 5.7 数据库由于历史原因设置的字符集为utf8 ,排序规则为utf8_general_ci ,

表是新建的,默认字符集设置为ut8mb4,排序规则为 ut8mb4_general_ci,

utf8_bin/utf8mb4:将字符串中的每一个字符以十六进制方式存储数据,区分大小写。utf8_general_ci/utf8mb4_general_ci:不区分大小写,ci为case insensitive的缩写,即大小写不敏感。

需求如下:

数据库t_test_json 表中 request_param 是一个jSON类型的字段,

user_name 值是:{“user_name”:“ABC”}, 查询匹配使用小写abc进行匹配,需要命中。

不可使用like 语法处理。

最开始使用这种写法,匹配结果发现是大小写敏感的,

SELECT * FROM t_test_json WHERE request_param -> '$.user_name' = 'abc'

数据库存的是ABC, 查询匹配用abc匹配,未命中。

修复解决方案 使用-> 语法含义: 使用了->运算符来提取JSON对象中request_param键的值,并将其作为JSON对象进行匹配。->运算符返回的是一个JSON对象,而不是字符串,因此无法直接使用LIKE进行模糊匹配。 使用->> 语法含义 使用了->>运算符来提取JSON对象中request_param键的值,并将其作为字符串进行模糊匹配。->>运算符返回的是一个字符串,因此可以使用LIKE进行模糊匹配。

因此,这两个查询语句在语法和匹配的方式上是不同的,可能会导致不同的结果。

修复方案如下所示:

SELECT * FROM t_test_json WHERE request_param ->> '$.user_name' = 'abc' COLLATE utf8mb4_general_ci

数据库存的是ABC, 查询匹配用abc匹配,命中。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3