在 MySQL 8.0 中包含键值对象时无法在 json 列中搜索值
Can't search values in a json column when it contains a key value object in MySQL 8.0
我在 MYSQL 的 JSON 列中搜索值时遇到问题 8.
目标是 select 至少有一个市场的值为 true 的所有记录,请参阅下面的示例,了解列值可能是什么样子。
{"at": false, "au": false, "be": false, "ch": false, "cz": false, "de": false, "dk": false, "es": false, "eu": false, "fi": false, "fr": false, "gl": false, "hk": false, "it": false, "jp": false, "kr": false, "nl": false, "no": false, "se": false, "uk": true, "us": false}
我们已尝试使用 JSON_CONTAINS 和 JSON_SEARCH,但最终得到 0 个结果(无法包括我们尝试过的所有查询,因为我们尚未保存它们)。似乎也找不到任何人尝试过使用类似结构 object/query 进行此操作。在 MySQL 中可以进行此查询吗?
我们希望有效的原始查询:
SELECT *
FROM
`redirects`
WHERE
JSON_CONTAINS(`synced_markets`, 'true')
更新
我们设法对它进行了一些修改,因为我们只关心是否至少有一个通过将其转换为 char 为真,但感觉这不是一个合适的解决方案。
WHERE CAST(`synced_markets` AS CHAR) LIKE '%true%'
我认为您误解了 JSON_CONTAINS
函数。它检查 json 字符串作为第一个参数是否包含 key-value
作为第二个 argument.Not 只是 value.The 正确用法如下所示:
SELECT JSON_CONTAINS('{"a": true, "b": false}', '{"a":true}');
命令returns1
.
阅读手册了解更多信息:https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html
也许您可以将列值视为字符串。而只是
SELECT *
FROM
`redirects`
WHERE
`synced_markets` like '%true%'
我在 MYSQL 的 JSON 列中搜索值时遇到问题 8.
目标是 select 至少有一个市场的值为 true 的所有记录,请参阅下面的示例,了解列值可能是什么样子。
{"at": false, "au": false, "be": false, "ch": false, "cz": false, "de": false, "dk": false, "es": false, "eu": false, "fi": false, "fr": false, "gl": false, "hk": false, "it": false, "jp": false, "kr": false, "nl": false, "no": false, "se": false, "uk": true, "us": false}
我们已尝试使用 JSON_CONTAINS 和 JSON_SEARCH,但最终得到 0 个结果(无法包括我们尝试过的所有查询,因为我们尚未保存它们)。似乎也找不到任何人尝试过使用类似结构 object/query 进行此操作。在 MySQL 中可以进行此查询吗?
我们希望有效的原始查询:
SELECT *
FROM
`redirects`
WHERE
JSON_CONTAINS(`synced_markets`, 'true')
更新
我们设法对它进行了一些修改,因为我们只关心是否至少有一个通过将其转换为 char 为真,但感觉这不是一个合适的解决方案。
WHERE CAST(`synced_markets` AS CHAR) LIKE '%true%'
我认为您误解了 JSON_CONTAINS
函数。它检查 json 字符串作为第一个参数是否包含 key-value
作为第二个 argument.Not 只是 value.The 正确用法如下所示:
SELECT JSON_CONTAINS('{"a": true, "b": false}', '{"a":true}');
命令returns1
.
阅读手册了解更多信息:https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html
也许您可以将列值视为字符串。而只是
SELECT *
FROM
`redirects`
WHERE
`synced_markets` like '%true%'