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
2
create table t1(id1 json);
insert into t1 values('{"id":1,"time":"2020-10-23 02:14:56"}');

大小写敏感

JSON 数据类型对于大小写是敏感的,’x’和’X’是不同的两个 JSON 数据,常见的 null、true、false 必须是小写才合法,通过 JSON_VALID 函数可以判断一个 JSON 数据是否合法

1
2
3
4
5
6
7
select JSON_VALID('null') n1,JSON_VALID('NULL') n2,JSON_VALID('false') n3,JSON_VALID('FALSE') n4;
+------+------+------+------+
| n1 | n2 | n3 | n4 |
+------+------+------+------+
| 1 | 0 | 1 | 0 |
+------+------+------+------+
1 row in set (0.00 sec)

对大小写敏感的原因是 JSON 默认的排序规则是 utf-8mb4_bin。

转义

如果 JSON 数据的 value 中包含双引号或单引号,则插入时需要加反斜线进行转义。

1
2
3
4
# 显示插入
insert into t1 values(json_object("name","ab\"c"))
# 隐式插入要多加一个反斜线
insert into t1 values('{"name":"ab\\"c"}');

存储限制

JSON 列不可以有默认值,且文本的最大长度取决于系统常量:max_allowed_packet。该值仅在服务器进行储存的时候才做限制,在内存中进行计算的时候是允许超过该值的。

1
2
show variables like 'max_allowed_packet';
# 67108864

常用函数

TO BE CONTINUE…