作者:旺财不哭
链接:https://www.jianshu.com/p/d4b012769a3b
经过漫长的测试,即将整体迁移至 Mysql8.0; Mysql8.0 对于 Json 操作新增/优
化了很多相关 Json 的 API 操作; 阅读了一下官方文档,虽然绝大多数的 JSON
操作都是应用层完成,但是会一些 Mysql 的 JSON 语法,方便进行 debug;选出
基础的, 有价值的部分,供未来参考;
https://dev.mysql.com/doc/refman/8.0/en/json.html
https://dev.mysql.com/doc/refman/8.0/en/json-utility-
functions.html
简单概述
• 不允许为 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()
; 使用时,有一些约束,但是会有更加
的性能;
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]}
//日期/时间类型定义