在MySQL 5.7.24上进行测试的方法有以下两种:
mysql 5.7.24> select config from mytable where json_contains(config, cast('[]' as json), '$.tier');+--------------+| config |+--------------+| {"tier": []} |+--------------+mysql 5.7.24> select config from mytable where json_contains_path(config, 'one', '$.tier');+--------------+| config |+--------------+| {"tier": []} |+--------------+我找到了另一个解决方案,它有助于严格检查是否为空数组:
首先,请看我有两行,其中一行有一个非空数组:
mysql 5.7.24> select config from mytable where json_contains(config, json_array(), '$.tier');+----------------------------------------+| config|+----------------------------------------+| {"tier": []} || {"tier": [{"name": "BK", "value": 8}]} |+----------------------------------------+2 rows in set (0.00 sec)现在,我确保数组的长度为0,以确认其为空:
mysql 5.7.24> select config from mytable where json_contains(config, json_array(), '$.tier') and json_length(config, '$.tier') = 0; +--------------+| config |+--------------+| {"tier": []} |+--------------+1 row in set (0.00 sec)


