千家信息网

MySQL 8.0是不是可以操作JSON

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章给大家分享的是有关MySQL 8.0是不是可以操作JSON ,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言:经过漫长的测试,
千家信息网最后更新 2026年11月03日MySQL 8.0是不是可以操作JSON

本篇文章给大家分享的是有关MySQL 8.0是不是可以操作JSON ,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

前言:

经过漫长的测试,即将整体迁移至Mysql8.0; Mysql8.0 对于Json操作新增/优化了很多相关Json的API操作; 阅读了一下官方文档,虽然绝大多数的JSON操作都是应用层完成,但是会一些Mysql的JSON语法,方便进行debug;选出基础的, 有价值的部分,供未来参考;

https://dev.mysql.com/doc/ref...
https://dev.mysql.com/doc/ref...

1、简单概述

不允许为null; Json格式定义与LONGBLOB or LONGTEXT类似; 它的最大长度是受到max_allowed_packet所控制的;
查看JSON字段所占用空间大小的函数时JSON_STORAGE_SIZE(xxx) ;
除普通的Json操作,额外支持GeoJSON (基于几何图形的针对地理空间数据交换格式)一些相关操作;
对Json栏位支持索引(结合Mysql8.0新特性,函数index);
一个可以支持部分的,原地更新Json Column 的可选优化项加入MySql8.0 ; 可以使用的函数有JSON_SET() , JSON_REPLACE() ,JSON_REMOVE() ; 使用时,有一些约束,但是会有更加的性能;

2、JSON基础工具

//使用JSON_ARRAY方法定义JSON数组;SELECT JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME())//结果:[1, "abc", null, true, "11:30:24.000000"]  //JSON_OBJECT 方法定义JSON对象SELECT JSON_OBJECT('id', 87, 'name', 'carrot')//结果{"id": 87, "name": "carrot"}//数组 与 对象嵌套的场景;[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]] {"k1": "value", "k2": [10, 20]}//日期/时间类型定义["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"] //JSON_QUOTE 将JSON对象转义成String, 就是将内部的符  号进行转义,并整体包裹上双引号;JSON_QUOTE(' "null" ')//结果 "\"null\""//将JSON内容美化并输出;JSON_PRETTY()//可以将JSON/JSON内部的元素转化为其他数据类型;//如下将JSON jdoc 中的id元素,转化为 unsigned int;[https://dev.mysql.com/doc/refman/8.0/en/json.html#json-converting-between-types]    (https://dev.mysql.com/doc/refman/8.0/en/json.html#json-converting-between-types)ORDER BY CAST(JSON_EXTRACT(jdoc, '$.id') AS   UNSIGNED);

合并JSON的操作 JSON_MERGE_PRESERVE() and JSON_MERGE_PATCH() 实际业务用的可能性很少;

-> -->操作符,按照key 找值; 区别在于 -->会去除包裹的"以及转义符号; 它的等价的Function形式是JSON_EXTRACT()

// {"mascot": "Our mascot is a dolphin named \"Sakila\"."}mysql> SELECT col->"$.mascot" FROM qtest;//结果:| "Our mascot is a dolphin named \"Sakila\"." |SELECT sentence->>"$.mascot" FROM facts;// 结果: | Our mascot is a dolphin named "Sakila". |

3、JSON Path expression

上面 --> 后双引号中的内容就是所谓的JSON Path expression;
该语法是ECMAScript规范的一部分,所以前端程序员应该特别熟悉;

以下面这段JSON为例:

 [3, {"a": [5, 6], "b": 10}, [99, 100]] $[0] = 3 ; $[1] = {"a": [5, 6], "b": 10}; $[2] = [99, 100];

与此同时,$[1], $[2] 并非标量, 进一步

$[1].a = [5,6]$[1].a[1] = 6$[1].b = 10;$[2][0] = 99;

更进一步支持的语法特性$[n to m]

 $[ 1 to 2] = [{"a": [5, 6], "b": 10}, [99, 100]] $[last-2 to last-1] = [3, {"a": [5, 6], "b": 10}]

总结一下;

  • a .*是代表所有的members in object;

  • b [*]是代表所有的cells in array;

  • c [prefix] ** suffix 是代表以prefix开始,以suffix为结束的所有路径;

4、查找并修改JSON

//如上, 应该可以用-->语法取代;mysql> SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": [3, 4, 5]}', '$.*');//[1, 2, [3, 4, 5]]  SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": [3, 4, 5]}', '$.c[*]')//[3, 4, 5]SELECT JSON_EXTRACT('{"a": {"b": 1}, "c": {"b": 2}}', '$**.b');//[1, 2]SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]');//[2, 3, 4]//JSON_SET JSON_INSERT JSON_REPLACE JSON_REMOVESET @j = '["a", {"b": [true, false]}, [10, 20]]';SELECT JSON_SET(@j, '$[1].b[0]', 1, '$[2][2]', 2);//| ["a", {"b": [1, false]}, [10, 20, 2]]    SELECT JSON_INSERT(@j, '$[1].b[0]', 1, '$[2][2]', 2);//["a", {"b": [true, false]}, [10, 20, 2]]JSON_REPLACE(@j, '$[1].b[0]', 1, '$[2][2]', 2)//["a", {"b": [1, false]}, [10, 20]]SELECT JSON_REMOVE(@j, '$[2]', '$[1].b[1]', '$[1].b[1]');//["a", {"b": [true]}]

JSON Table Functions 一个比较常见的场景是JSON数据本身是一个表的结构;

JSON_TABLE(*expr*, *path* COLUMNS (*column_list*) [AS\] *alias*)

SELECT *  FROM JSON_TABLE(   '[{"a":"3"},{"a":2},{"b":1},{"a":0},{"a":[1,2]}]',  ->     "$[*]"  ->     COLUMNS(  ->       rowid FOR ORDINALITY,  ->       ac VARCHAR(100) PATH "$.a" DEFAULT '111' ON EMPTY DEFAULT '999' ON ERROR,  ->       aj JSON PATH "$.a" DEFAULT '{"x": 333}' ON EMPTY,  ->       bx INT EXISTS PATH "$.b"  ->     )  ->   ) AS tt;

Comparison and Ordering of JSON Values

目前没感觉倒价值;

Aggregation of JSON Values

目前没感觉倒价值; 将返回值转成其他类型就可以使用聚合函数;

以上就是MySQL 8.0是不是可以操作JSON ,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

结果 函数 语法 支持 代表 价值 对象 就是 数据 类型 转义 部分 元素 内容 包裹 场景 基础 引号 感觉 数组 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 山东特亿宝互联网科技有限公司 互联网为科技 猪兼强互联网科技 万达互联网科技 中国互联网金融科技基金 互联网科技类展会 新华互联网科技校企合作 哈尔滨新华互联网科技学院 宁夏众和广鑫互联网科技有限公司 互联网科技商业 河南住房之家互联网科技 华夏恒生科技与互联网科技 爱医互联网络科技 群盈汇互联网科技有限公司 每天都有哪些好的互联网科技 信承诺互联网科技有限公司 西安有哪些互联网高科技企业 美国五大互联网科技公司市值多少 互联网金融金融科技 北京瑞云互联网科技有限公司 广州紫鲸互联网科技有限公司 互联网科技会 金融科技 互联网金融 善班互联网科技有限公司 互联网科技实习生岗位职责 科技与互联网哪个更好 互联网经济与金融科技 世界互联网科技公司市值排名 互联网科技革命什么开始 长沙渺峰互联网科技有限公司
0