今天咱們來講一說,MySQL JSON數據類型,JSON我相信你們都已經很熟悉了,(Java對象與JSON互轉,能夠查看《fastjson詳解》這篇文章),但在 MySQL中,直至 5.7 版本中,才正式引入 JSON數據類型。在次以前,咱們一般使varchar或text數據類型存儲JSON格式數據。mysql
在這一章節,再也不具體介紹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)
這裏須要注意的是:數組
JSON列存儲的必須是JSON格式數據,不然會報錯。函數
JSON數據類型是沒有默認值的。優化
你們都應該知道,在沒有JSON數據類型時,還不是同樣可使用varchar類型或text類型來存儲就JSON格式的字符串,那麼,JSON格式到底哪些「過人"之處呢?好處還真很多呢。spa
JSON數據類型,會自動校驗數據是否爲JSON格式,若是不是JSON格式數據,則會報錯。code
MySQL提供了一組操做JSON數據的內置函數。對象
優化的存儲格式,存儲在JSON列中的JSON數據被轉換成內部的存儲格式。其容許快速讀取。blog
能夠修改特定的鍵值,(若是以前在MySQL中存儲過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)
這裏須要注意的是:
若是參數爲null值,顯示也爲Null值。
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)
做用: 判斷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:我負責寫文章,大家幫忙點贊,留言,轉發可好?
推薦文章
掃碼關注,一塊兒進步
我的博客: http://www.andyqian.com