mysql5.7原生支持json格式

知道mysql已經支持json格式。mongodb的便利性,給開發帶來了新的視角。原來擴展性還能這麼簡單。數據的存儲還能用json格式。 可是一直尚未利用這個特性。最近在公司的項目中,有一個需求是配置釘釘的權限。按照常規的設計,得是用多表來實現。可是用過mongodb的我,想採用json格式的形式來存儲。這樣也能得到比較好的擴展性。 一開始我覺得能夠直接用fast中的JSonObjec來存儲字段。發現仍是得用String來存。之後能夠探索一下可不能夠這樣操做。可能如今的一些框架對於這種格式的存儲仍是不夠完美。mysql

getConfigJson

setConfigJson

若是這種方式好的話,能夠推廣起來。可是我如今也只是剛剛起步。 下面記錄一下若是字段類型爲json的話,在數據庫中查詢的話,應該怎麼查詢。sql

mysql> create table user ( uid int auto_increment, 
    -> data json,primary key(uid))engine=innodb; 
Query OK, 0 rows affected (0.01 sec) 
  
mysql> insert into user values (NULL, 
    -> '{"name":"David","mail":"jiangchengyao@gmail.com","address":"Shangahai"}'); 
Query OK, 1 row affected (0.00 sec) 
  
mysql> insert into user values (NULL,'{"name":"Amy","mail":"amy@gmail.com"}'); 
Query OK, 1 row affected (0.00 sec)

支持索引:經過虛擬列的功能能夠對JSON中的部分數據進行索引mongodb

能夠看到咱們新建了表user,而且將列data定義爲了JSON類型。這意味着咱們能夠對插入的數據作JSON格式檢查,確保其符合JSON格式的約束,如插入一條不合法的JSON數據會報以下錯誤:

mysql> insert into user values (NULL,"test"); 
ERROR 3130 (22032): Invalid JSON text: "Invalid value" at position 2 in value (or column) 'test'.

此外,正如前面所說的,MySQL 5.7提供了一系列函數來高效地處理JSON字符,而不是須要遍歷全部字符來查找,這不得不說是對MariaDB dynamic column的巨大改進:數據庫

mysql> select jsn_extract(data, '$.name'),jsn_extract(data,'$.address') from user; 
+-----------------------------+-------------------------------+ 
| jsn_extract(data, '$.name') | jsn_extract(data,'$.address') | 
+-----------------------------+-------------------------------+ 
| "David" | "Shangahai" | 
| "Amy" | NULL | 
+-----------------------------+-------------------------------+ 
2 rows in set (0.00 sec)

MySQL 5.7原生JSON格式支持json

相關文章
相關標籤/搜索