說說 MySQL JSON 數據類型

本文首發於我的公衆號《andyqian》,期待你的關注!

前言

  今天咱們來講一說,MySQL JSON數據類型,JSON我相信你們都已經很熟悉了,(Java對象與JSON互轉,能夠查看《fastjson詳解》這篇文章),但在 MySQL中,直至 5.7 版本中,才正式引入 JSON數據類型。在次以前,咱們一般使varchar或text數據類型存儲JSON格式數據。mysql

如何使用JSON?

  在這一章節,再也不具體介紹JSON格式以及語法,咱們來介紹一下,在MySQL中如何建立JSON數據列。 語法:sql

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

新增數據: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格式到底哪些「過人"之處呢?好處還真很多呢。spa

  1. JSON數據類型,會自動校驗數據是否爲JSON格式,若是不是JSON格式數據,則會報錯。code

  2. MySQL提供了一組操做JSON數據的內置函數。對象

  3. 優化的存儲格式,存儲在JSON列中的JSON數據被轉換成內部的存儲格式。其容許快速讀取。blog

  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

掃碼關注,一塊兒進步

我的博客: http://www.andyqian.com

相關文章
相關標籤/搜索