表看起来像这样:
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吗?为什么=不工作?
我知道 JSON 字段是一种特殊的字段类型,旨在让您轻松查询特定属性,但我希望能够轻松检查完整的 JSON。很明显,JSON 字段有一些参数会导致=无法按我预期的那样工作。
这是我想出的解决方案,转换JSON为CHAR:
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