JSON_Search()返回空值

y0u0uwnf  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(129)

我遇到了一个查询问题。在我的数据库中,我有一个字段包含以下格式的JSON:

[[0, 16, 22, 37, 0, 0, 0, 71, 82], 
[0, 18, 0, 36, 43, 0, 60, 0, 88], 
[9, 10, 0, 0, 0, 58, 69, 77, 0]]

使用此查询

SELECT JSON_SEARCH(NumeriJSON, 'all', 77,null, '$[*]') AS Indice FROM Cartella WHERE JSON_CONTAINS(NumeriJSON->'$[*]', '77')

我想得到数字在JSON中的位置,但是返回null。为什么?JSON的结构是有效的,因为JSON_CONTAINS工作得很好。谢谢。

e5njpo68

e5njpo681#

https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-search says:

  • JSON_SEARCH(JSON文档,一个或全部,搜索字符串[,转义字符[,路径]...])

返回JSON文档中给定字符串的路径。
我加粗了单词string。如果JSON中的值是整数,JSON_SEARCH()就不起作用。
如果将它们设置为字符串,则示例有效:

insert into Cartella (NumeriJson) values (
  '[["0", "16", "22", "37", "0", "0", "0", "71", "82"],
    ["0", "18", "0", "36", "43", "0", "60", "0", "88"],
    ["9", "10", "0", "0", "0", "58", "69", "77", "0"]]');

mysql> select json_search(numerijson, 'all', '77', null, '$[*]') as `index`
    from cartella where json_contains(numerijson->'$[*]', '"77"');
+-----------+
| index     |
+-----------+
| "$[2][7]" |
+-----------+

这个问题是reported as a bug in 2015,但通过简单地记录它只支持字符串搜索来解决。
当时支持非字符串的是reported as a new feature request in 2018,到目前为止还没有解决方案。
同时,如果要使用JSON_SEARCH(),则必须将整数存储为字符串。
我还建议停止使用JSON,将整数存储在普通的行和列中,这样搜索整数就可以了。
另外,请不要使用"indice"这个词,根本没有这个词。

相关问题