点击上方"蓝字"
关注我们,享更多干货!
现在很多应用环境中都能看到JSON灵活的影子。各阶段数据层次的递归层次,能很好的分辨。一直对MySQL的JSON很期待的,最近才有时间研究一下。
JSON了解
JSON就是一串字符串,只不过元素会使用特定的符号标注。比如:
{} 双括号表示对象
[] 中括号表示数组
“” 双引号内是属性或值
: 冒号表示后者是前者的值
关系型数据库实现JSON难度在于,关系型数据库需要定义数据库和表结构。为了应对这一点,从MySQL 5.7开始,MySQL支持了JavaScript对象表示(JavaScriptObject Notation,JSON) 数据类型。之前,这类数据不是单独的数据类型,会被存储为字符串。新的JSON数据类型提供了自动验证的JSON文档以及优化的存储格式。
MySQL里JSON文档以二进制格式存储,它提供以下功能:
自动验证存储在JSON列中的JSON文档。无效文档产生错误。
优化的存储格式。存储在JSON列中的JSON文档被转换为允许快速读取访问文档元素的内部格式。二进制格式存储的JSON值。
对文档元素的快速读取访问。当服务器再次读取JSON文档时,不需要重新解析文本获取该值。通过键或数组索引直接查找子对象或嵌套值,而不需要读取文档中的所有值。
存储JSON文档所需的空间大致与LONGBLOB或LONGTEXT相同。
存储在JSON列中的任何JSON文档的大小都仅限于max_allowed_packet系统变量的值。
MySQL 8.0.13之前,JSON列不能有非NULL的默认值。
JSON操作
数据保存到MySQL,操作方面都提供哪些支持?目前MySQL 8.0版本的的JSON总共支持32个普通函数和2个空间函数:
1. 索引:
JSON列,像其他二进制类型的列一样,不直接索引;相反,您可以在生成的列上创建索引,从JSON列中提取标量值。有关详细示例,请参见为生成的列建立索引以提供JSON列索引。
MySQL优化器还会在匹配JSON表达式的虚拟列上寻找兼容的索引。
在MySQL 8.0.17及以后版本中,InnoDB存储引擎支持JSON数组上的多值索引。看到多值索引。
MySQL NDB Cluster 8.0支持J