在 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%'