JSON 简介
JSON 类型是 JavaScript Object Notation 的缩写,他是一种数据交换格式。在 JSON 出现之前,数据交换多数由 XML 来实现,但随着 XML 的规范越来越复杂,开发人员使用越来越不方便。因此出现了这种数据格式。
MySQL 从 5.7.8 版本开始支持 JSON 格式数据。JSON 类型对比字符类型有以下特点:
- JSON 数据类型会自动校验数据是否为 JSON 格式,如果不是 JSON 格式则会报错。
- MySQL 提供了一组操作 JSON 的内置函数,可以方便的提取各类数据,可以修改特定的键值。
- 优化的存储格式,存储在 JSON 列中的 JSON 数据被转换成内部的存储格式,允许快速读取
简单地说,JSON 实际就是 JavaScript 的一个子集支持的数据类型包括 BUMBER、STRING、BOOLEAN、BULL、ARRAY、OBJECT 六种类型。一个 JSON 的的元素可以是这六种类型的任意组合。其中 BOOLEAN 是用 true/false 的字面值来进行表示,null 使用 null 的文本来进行表示。ARRAY 要用中括号括起来,Object 保存的 KV 要用大括号引起来,其中的 KEY 也要用双引号引起。
1 | create table t1(id1 json); |
大小写敏感
JSON 数据类型对于大小写是敏感的,’x’和’X’是不同的两个 JSON 数据,常见的 null、true、false 必须是小写才合法,通过 JSON_VALID 函数可以判断一个 JSON 数据是否合法
1 | select JSON_VALID('null') n1,JSON_VALID('NULL') n2,JSON_VALID('false') n3,JSON_VALID('FALSE') n4; |
对大小写敏感的原因是 JSON 默认的排序规则是 utf-8mb4_bin。
转义
如果 JSON 数据的 value 中包含双引号或单引号,则插入时需要加反斜线进行转义。
1 | # 显示插入 |
存储限制
JSON 列不可以有默认值,且文本的最大长度取决于系统常量:max_allowed_packet。该值仅在服务器进行储存的时候才做限制,在内存中进行计算的时候是允许超过该值的。
1 | show variables like 'max_allowed_packet'; |
常用函数
TO BE CONTINUE…