说说 MySQL JSON 数据类型

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

本文首发于个人公众号《andyqian》,期待你的关注!

前言

  今天我们来说一说,MySQL JSON数据类型,JSON我相信大家都已经很熟悉了,(Java对象与JSON互转,可以查看《fastjson详解》这篇文章),但在 MySQL中,直至 5.7 版本中,才正式引入 JSON数据类型。在次之前,我们通常使varchar或text数据类型存储JSON格式数据。

如何使用JSON?

  在这一章节,不再具体介绍JSON格式以及语法,我们来介绍一下,在MySQL中如何创建JSON数据列。 语法:

create table t_base_data(
id bigint(20) not null primary key auto_increment, 
content json
)

新增数据:

mysql> insert into t_base_data (content)values('{"blog": "www.andyqian.com", "account": "andyqian"}');
Query OK, 1 row affected (0.01 sec)

这里需要注意的是:

  1. JSON列存储的必须是JSON格式数据,否则会报错。

  2. JSON数据类型是没有默认值的。

Varchar VS JSON

  大家都应该知道,在没有JSON数据类型时,还不是一样可以使用varchar类型或text类型来存储就JSON格式的字符串,那么,JSON格式到底哪些“过人"之处呢?好处还真不少呢。

  1. JSON数据类型,会自动校验数据是否为JSON格式,如果不是JSON格式数据,则会报错。

  2. MySQL提供了一组操作JSON数据的内置函数。

  3. 优化的存储格式,存储在JSON列中的JSON数据被转换成内部的存储格式。其允许快速读取。

  4. 可以修改特定的键值,(如果之前在MySQL中存储过JSON格式字符串的小伙伴,应该经历过每次修改一个值,都要将整个JSON字符串更新一遍的尴尬。)

你看,上面这些好处,诱惑足够大吗?

常用JSON函数

  MySQL中,给我们提供了不少JSON相关的函数,简直让我们爱不释手,下面一一来介绍常用的JSON函数。

注意:以下示例MySQL版本为: 5.7.20

1. JSON_TYPE 函数

作用: 显示当前JSON字符串的类型。

例如:

mysql> select json_type('"hello"');
+----------------------+
| json_type('"hello"') |
+----------------------+
| STRING               |
+----------------------+
1 row in set (0.00 sec)

集合类型:

mysql> select json_type('["andyqian","Java","xingming"]');
+---------------------------------------------+
| json_type('["andyqian","Java","xingming"]') |
+---------------------------------------------+
| ARRAY                                       |
+---------------------------------------------+
1 row in set (0.00 sec)

2. JSON_ARRAY 函数
作用: 将数组对象转换为json数组
例如:

mysql> select json_array(1,now(),"andyqian");
+-----------------------------------------------+
| json_array(1,now(),"andyqian")                |
+-----------------------------------------------+
| [1, "2017-12-07 23:05:41.000000", "andyqian"] |
+-----------------------------------------------+
1 row in set (0.00 sec)

其中json_array参数待转换为json的对象集合,对Java熟悉的童鞋,可以看成是集合。

3. JSON_OBJECT 函数
语法:JSON_OBJECT(key,value,key1,value1)
作用:将对象转换为json格式数据
例如:

mysql> select json_object('name','鞠骞','account','andyqian');
+---------------------------------------------------+
| json_object('name','鞠骞','account','andyqian')   |
+---------------------------------------------------+
| {"name": "鞠骞", "account": "andyqian"}           |
+---------------------------------------------------+
1 row in set (0.00 sec)

4. JSON_QUOTE 函数
作用: 引用字符串作为json值。
例如:

mysql> select json_quote('"andyqian"');
+--------------------------+
| json_quote('"andyqian"') |
+--------------------------+
| "\"andyqian\""           |
+--------------------------+
1 row in set (0.00 sec)

这里需要注意的是:

  1. 如果参数为null值,显示也为Null值。

  2. JSON_UNQUOTE 函数与JSON_QUOTE 函数作用正好相反。

5. JSON_MERGE函数
作用: 合并JSON字符串
例如:

mysql> select json_merge('{"blog":"www.andyqian.com"}','{"account":"andyqian"}');
+--------------------------------------------------------------------+
| json_merge('{"blog":"www.andyqian.com"}','{"account":"andyqian"}') |
+--------------------------------------------------------------------+
| {"blog": "www.andyqian.com", "account": "andyqian"}                |
+--------------------------------------------------------------------+
1 row in set (0.00 sec)
  1. JSON_VALID 函数

作用: 判断JSON格式是否有效 例如:

mysql> select json_valid("andyqian"),json_valid('"andyqian"'),json_valid(null);
+------------------------+--------------------------+------------------+
| json_valid("andyqian") | json_valid('"andyqian"') | json_valid(null) |
+------------------------+--------------------------+------------------+
|                      0 |                        1 |             NULL |
+------------------------+--------------------------+------------------+
1 row in set (0.00 sec)

这里需要注意的是: 0 表示无效,1 表示有效,NUll 表示参数为null。

MySQL提供了不少操作JSON数据的函数,这里只给出一些常见的函数,更多请参考官网查看。

小结

  由于上面描述了不少重要的函数,避免带来阅读疲劳,今天就不写命令了。另外,今天数了数,MySQL系列文章,也有十多篇了,感觉还有不少东西,可以记录,这个系列还会写一段时间,在这期间,你们有想让我分享的文章,也可以留言哦。

PS:我负责写文章,你们帮忙点赞,留言,转发可好?

推荐文章

写会MySQL索引

读懂MySQL执行计划

谈谈MySQL隐式类型转换

学会MySQL LIMIT

092341_fEn4_1462914.gif

扫码关注,一起进步

个人博客: http://www.andyqian.com

 

转载于:https://my.oschina.net/u/1462914/blog/1586815

你可能感兴趣的:(说说 MySQL JSON 数据类型)