MySQL 判断 JSON 数组是否相等

文章目录

  • 1.问题
  • [2.使用 JSON_CONTAINS 与 JSON_LENGTH](#2.使用 JSON_CONTAINS 与 JSON_LENGTH)
  • 参考文献

1.问题

JSON(JavaScript Object Notation)是流行的互联网应用服务之间的数据交换格式。

MySQL 从 5.7 版本开始支持 RFC 7159 定义的 JSON 规范,主要有 JSON 对象 和 JSON 数组两种类型。

如果需要判断 JSON 数组是否相等,该如何判断呢?

2.使用 JSON_CONTAINS 与 JSON_LENGTH

JSON_CONTAINS 用于判断JSON 文档是否包含路径中的特定对象。

sql 复制代码
JSON_CONTAINS(target, candidate[, path])

当作用于 JSON 数组时,可判断数组是否包含指定的元素。

JSON_LENGTH 用于获取 JSON 文档中的元素数量。

sql 复制代码
JSON_LENGTH(json_doc[, path])

当作用于 JSON 数组时,可获取的是数组元素个数。

具体判断方式如下:

sql 复制代码
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,并不代表两个数组相等。只有长度相等且包含另一个数组中的所有元素时,两个数组才可判为相等。

注意,以上判断两数组是否相等忽略顺序,即

复制代码
[1,2,3] = [3,2,1]

如果严格判断两个 JSON 数组是否相等,直接比较即可。

sql 复制代码
WHERE json_array_column1=json_array_column2

// 或指定数组
json_array_column=JSON_ARRAY(v1,v2...)

参考文献

OpenAI ChatGPT
MySQL 8.0 Reference Manual

相关推荐
imDwAaY6 小时前
MySQL 存储引擎是什么?
android·数据库·mysql
for_ever_love__7 小时前
MySQL 8.0 数据类型选型指南:INT、DECIMAL、VARCHAR 与时间字段怎么选
mysql·adb·数据类型·varchar·长度·字段类型选择
张张123y7 小时前
# 后端第七课:FastAPI 实战入门(用刚学的 Python 写第一个 API 接口)
开发语言·python·mysql·api·fastapi
渣渣盟7 小时前
2000万QPS背后的存储引擎博弈:InnoDB、MyRocks、WiredTiger到底谁更强?
数据库·mysql
张张123y8 小时前
# 后端第八课:数据库入门(给 FastAPI 接口加上“记忆“,存下问答历史)
数据库·sql·mysql·oracle·fastapi·sqllite
voipmaker8 小时前
选煤厂智能化:UWB 人员定位系统 WebAPI 对接融合通信平台实战
物联网·实时互动·json·音视频·实时音视频·web·视频
paopaokaka_luck9 小时前
校园新闻推荐系统(DeepSeek新闻助手、个性化推荐算法、 Redis热词排行榜、ECharts运营分析、互动与实时通知、新闻运营闭环)
java·spring boot·mysql·spring·tomcat·echarts·intellij idea
RestCloud9 小时前
数据同步零中断:ETL服务宕机重启后异常任务自动重跑
数据仓库·mysql·etl·etlcloud·数据传输·etl工具
猫咪很可爱10 小时前
MySQL 定时 DDL 导致 mysqldump 备份失败:场景模拟、排查与优化建议
mysql
数据库小学妹10 小时前
MySQL内存占用过高怎么排查?分层定位与OOM根因
数据库·经验分享·mysql·内存·oom