1.问题
JSON(JavaScript Object Notation)是流行的互联网应用服务之间的数据交换格式。
MySQL 从 5.7 版本开始支持 RFC 7159 定义的 JSON 规范,主要有 JSON 对象 和 JSON 数组两种类型。
如果需要判断 JSON 数组是否相等,该如何判断呢?
2.使用 JSON_CONTAINS 与 JSON_LENGTH
JSON_CONTAINS 用于判断JSON 文档是否包含路径中的特定对象。
代码语言:javascript复制JSON_CONTAINS(target, candidate[, path])
当作用于 JSON 数组时,可判断数组是否包含指定的元素。
JSON_LENGTH 用于获取 JSON 文档中的元素数量。
代码语言:javascript复制JSON_LENGTH(json_doc[, path])
当作用于 JSON 数组时,可获取的是数组元素个数。
具体判断方式如下:
代码语言:javascript复制WHERE JSON_CONTAINS(json_array_column, JSON_ARRAY(v1,v2...)) AND JSON_LENGTH(json_array_column)=array_length
其中 JSON_ARRAY 函数可以将一个或多个值创建为 JSON 数组,如果指定多个值,则表示要同时包含多个值条件才为 true。
使用 JSON_CONTAINS,为什么还要 JSON_LENGTH 呢?
因为 JSON_CONTAINS 为 true,并不代表两个数组相等。只有长度相等且包含另一个数组中的所有元素时,两个数组才可判为相等。
注意,以上判断两数组是否相等忽略顺序,即
代码语言:javascript复制[1,2,3] = [3,2,1]
如果严格判断两个 JSON 数组是否相等,直接比较即可。
代码语言:javascript复制WHERE json_array_column1=json_array_column2
// 或指定数组
json_array_column=JSON_ARRAY(v1,v2...)
参考文献
OpenAI ChatGPT MySQL 8.0 Reference Manual