mysql 在 json 字段上查询完全匹配不起作用

And*_*rew 5 mysql json

表看起来像这样:

my_table
id (int)   create_time (timestamp)   meta_data (json)
1          2019-01-20 18:35:42        {"my property": "123"}
2          2019-01-20 19:35:42        {"more data": "456"}
Run Code Online (Sandbox Code Playgroud)

我试过查询:

SELECT * FROM my_table
WHERE meta_data = '{"my property": "123"}';

SELECT * FROM my_table
WHERE meta_data = '\{\"my property\"\: \"123\"\}';
Run Code Online (Sandbox Code Playgroud)

它不起作用,如何在 json 字段字符串上查询完全匹配?

我注意到这确实有效...

SELECT * FROM my_table
WHERE meta_data LIKE '\{\"my property\"\: \"123\"\}';
Run Code Online (Sandbox Code Playgroud)

我需要使用LIKE吗?为什么=不工作?

And*_*rew 6

我知道 JSON 字段是一种特殊的字段类型,旨在让您轻松查询特定属性,但我希望能够轻松检查完整的 JSON。很明显,JSON 字段有一些参数会导致=无法按我预期的那样工作。

这是我想出的解决方案,转换JSONCHAR

SELECT * FROM my_table
WHERE CAST(meta_data as CHAR) = '{"my property": "123"}';
Run Code Online (Sandbox Code Playgroud)

另外一个选项:

SELECT * FROM my_table
WHERE meta_data = CAST('{"my property": "123"}' AS JSON);
Run Code Online (Sandbox Code Playgroud)

您还可以通过使用 CAST(value AS JSON) 将其他类型的值转换为 JSON 类型来获取 JSON 值;" https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html #function_json-quote