mysql - 我可以在 MySQL 中使用 JSON_EXTRACT 进行不区分大小写的搜索吗?

标签 mysql json

我在运行 SELECT * FROM mytable WHERE LOWER(JSON_EXTRACT(metadata, "$.title")) = 'hello world'意图 hello world是来自用户的数据,我会将其展平为全部小写。我的数据库中的实际值是“Hello World”,但每次搜索都返回空值。

如果我做 SELECT LOWER(JSON_EXTRACT(metadata, "$.title")) FROM mytable ,它肯定会以小写形式返回 hello world .不确定我在这里缺少什么。

获取实际值的查询:
SELECT JSON_EXTRACT(metadata, "$.title") FROM mytable找我 "Hello World"SELECT LOWER(JSON_EXTRACT(metadata, "$.title")) FROM mytable找我 "hello world"
试图找到正确行的查询

让我有值(value)
SELECT * FROM mytable WHERE JSON_EXTRACT(metadata, "$.title") = "Hello World"SELECT * FROM mytable WHERE metadata->"$.title" = "Hello World"SELECT * FROM ututs WHERE LOWER(metadata->"$.title") LIKE "%hello world%"
什么都不给我
SELECT * FROM mytable WHERE JSON_EXTRACT(metadata, "$.title") = "hello world"SELECT * FROM mytable WHERE JSON_EXTRACT(metadata, "$.title") LIKE "%hello world%"SELECT * FROM ututs WHERE LOWER(metadata->"$.title") = "hello world"SELECT * FROM ututs WHERE LOWER(metadata->"$.title") LIKE "hello"
所以看起来结果是返回值,包括引号。不过,这似乎不是问题,因为我在匹配案例时得到了结果。我也很困惑为什么%一开始是解决我的问题。 "之间没有空格和 H .我自己输入了 JSON。

我也更新了 metadata直列{"title":"Hello World"}通过手动输入。 MySQL 自动在冒号后添加一个空格使其成为 {"title": "Hello World"} ,这很好,但只是检查任何空格的完整性。

最佳答案

SELECT * FROM mytable WHERE LOWER(JSON_EXTRACT(metadata, "$.title")) = JSON_QUOTE("hello world")SELECT * FROM mytable WHERE LOWER(metadata->"$.title") = JSON_QUOTE("hello world")有效,但我不确定为什么我需要使用 JSON_QUOTE使用时 LOWER与不需要它进行精确搜索。

如果有人能解释原因,我很乐意将它们标记为答案。

关于mysql - 我可以在 MySQL 中使用 JSON_EXTRACT 进行不区分大小写的搜索吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49782240/

相关文章:

php - 如何使用 PHP 和 MySQL 检索该表的分组信息?

mysql - MySQL操作有速度差异吗?

mysql - 根据每组中的一列删除重复项

angularjs - NodeJS中,将数据库查询输出转换为Json格式

json - JSON模板库-将动态元素添加到静态JSON文件

java - 如何用正则表达式替换字符串值

php - 谷歌地图api数据库交互

针对新数据库运行 install.sql 时出现 MySQL 问题

javascript - 如何在 JavaScript 中操作 JSON 数据而不产生副作用?

java - Android 错误 : invoke a null object. JSON/Volley