說說 MySQL JSON 數據類型
本文首發於個人微信公眾號《andyqian》,期待你的關注!
前言
今天我們來說一說,MySQL JSON數據類型,JSON我相信大家都已經很熟悉了,(Java對象與JSON互轉,可以查看《fastjson詳解》這篇文章),但在 MySQL中,直至 5.7 版本中,才正式引入 JSON數據類型。在次之前,我們通常使varchar或text數據類型存儲JSON格式數據。
如何使用JSON?
在這一章節,不再具體介紹JSON格式以及語法,我們來介紹一下,在MySQL中如何創建JSON數據列。 語法:
create table t_base_data(nid bigint(20) not null primary key auto_increment, ncontent jsonn)n
新增數據:
mysql> insert into t_base_data (content)values({"blog": "www.andyqian.com", "account": "andyqian"});nQuery OK, 1 row affected (0.01 sec)n
這裡需要注意的是:
- JSON列存儲的必須是JSON格式數據,否則會報錯。
- JSON數據類型是沒有默認值的。
Varchar VS JSON
大家都應該知道,在沒有JSON數據類型時,還不是一樣可以使用varchar類型或text類型來存儲就JSON格式的字元串,那麼,JSON格式到底哪些「過人"之處呢?好處還真不少呢。
- JSON數據類型,會自動校驗數據是否為JSON格式,如果不是JSON格式數據,則會報錯。
- MySQL提供了一組操作JSON數據的內置函數。
- 優化的存儲格式,存儲在JSON列中的JSON數據被轉換成內部的存儲格式。其允許快速讀取。
- 可以修改特定的鍵值,(如果之前在MySQL中存儲過JSON格式字元串的小夥伴,應該經歷過每次修改一個值,都要將整個JSON字元串更新一遍的尷尬。)
你看,上面這些好處,誘惑足夠大嗎?
常用JSON函數
MySQL中,給我們提供了不少JSON相關的函數,簡直讓我們愛不釋手,下面一一來介紹常用的JSON函數。
注意:以下示例MySQL版本為: 5.7.20
1. JSON_TYPE 函數
作用: 顯示當前JSON字元串的類型。
例如:
mysql> select json_type("hello");n+----------------------+n| json_type("hello") |n+----------------------+n| STRING |n+----------------------+n1 row in set (0.00 sec)n
集合類型:
mysql> select json_type(["andyqian","Java","xingming"]);n+---------------------------------------------+n| json_type(["andyqian","Java","xingming"]) |n+---------------------------------------------+n| ARRAY |n+---------------------------------------------+n1 row in set (0.00 sec)n
2. JSON_ARRAY 函數
作用: 將數組對象轉換為json數組例如:mysql> select json_array(1,now(),"andyqian");n+-----------------------------------------------+n| json_array(1,now(),"andyqian") |n+-----------------------------------------------+n| [1, "2017-12-07 23:05:41.000000", "andyqian"] |n+-----------------------------------------------+n1 row in set (0.00 sec)n
其中json_array參數待轉換為json的對象集合,對Java熟悉的童鞋,可以看成是集合。
3. JSON_OBJECT 函數
語法:JSON_OBJECT(key,value,key1,value1)
mysql> select json_object(name,鞠騫,account,andyqian);n+---------------------------------------------------+n| json_object(name,鞠騫,account,andyqian) |n+---------------------------------------------------+n| {"name": "鞠騫", "account": "andyqian"} |n+---------------------------------------------------+n1 row in set (0.00 sec)n
4. JSON_QUOTE 函數
作用: 引用字元串作為json值。
例如:mysql> select json_quote("andyqian");n+--------------------------+n| json_quote("andyqian") |n+--------------------------+n| ""andyqian"" |n+--------------------------+n1 row in set (0.00 sec)n
這裡需要注意的是:
- 如果參數為null值,顯示也為Null值。
- JSON_UNQUOTE 函數與JSON_QUOTE 函數作用正好相反。
5. JSON_MERGE函數
作用: 合併JSON字元串例如:mysql> select json_merge({"blog":"www.andyqian.com"},{"account":"andyqian"});n+--------------------------------------------------------------------+n| json_merge({"blog":"www.andyqian.com"},{"account":"andyqian"}) |n+--------------------------------------------------------------------+n| {"blog": "www.andyqian.com", "account": "andyqian"} |n+--------------------------------------------------------------------+n1 row in set (0.00 sec)n
- JSON_VALID 函數
作用: 判斷JSON格式是否有效 例如:
mysql> select json_valid("andyqian"),json_valid("andyqian"),json_valid(null);n+------------------------+--------------------------+------------------+n| json_valid("andyqian") | json_valid("andyqian") | json_valid(null) |n+------------------------+--------------------------+------------------+n| 0 | 1 | NULL |n+------------------------+--------------------------+------------------+n1 row in set (0.00 sec)n
這裡需要注意的是: 0 表示無效,1 表示有效,NUll 表示參數為null。
MySQL提供了不少操作JSON數據的函數,這裡只給出一些常見的函數,更多請參考官網查看。
小結
由於上面描述了不少重要的函數,避免帶來閱讀疲勞,今天就不寫命令了。另外,今天數了數,MySQL系列文章,也有十多篇了,感覺還有不少東西,可以記錄,這個系列還會寫一段時間,在這期間,你們有想讓我分享的文章,也可以留言哦。
PS:我負責寫文章,你們幫忙點贊,留言,轉發可好?
推薦文章
寫會MySQL索引
讀懂MySQL執行計劃
談談MySQL隱式類型轉換
學會MySQL LIMIT
推薦閱讀: