因為項目需要,存儲字段存儲成了JSON格式,在項目中是將查詢出來的值通過jackson轉成相應的bean進行處理的,覺得不夠簡單方便。
偶然下,知道了MYSQL5.7原生支持SQL,今天一回來就折騰安裝了MYSQL5.7,所以才出現了上篇安裝綠色版MYSQL的博文,廢話不多說,研究了1個小時的MySQL的JSON的支持。以下是一些粗淺的心得。
一、創建表
CREATE TABLE `user` ( `uid` int(11) NOT NULL AUTO_INCREMENT, `info` json DEFAULT NULL, #注意desc字段類型為json PRIMARY KEY (`uid`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
在MYSQL5.7以上,多了一個字段類型:json
原生的JSON優勢如下:
1. 存儲上類似text,可以存非常大的數據。
2. JSON有效性檢查:插入的數據必須是JSON類型的字符串才行。
3. 相比於傳統形式,不需要遍歷所有字符串才能找到數據。
4. 支持索引:通過虛擬列的功能可以對JSON中部分的數據進行索引。
二、使用
1. 插入SQL語句,注意info字段必須要是json類型,否則插入失敗
INSERT INTO `user`(`uid`,`info`) VALUES (1,'{\"mail\": \"jiangchengyao@gmail.com\", \"name\": \"David\", \"address\": \"Shangahai\"}'),(2,'{\"mail\": \"amy@gmail.com\", \"name\": \"Amy\"}');
2. 簡單查詢
SELECT uid,json_extract(info,'$.mail') AS 'mail',json_extract(info,'$.name') AS 'name' FROM USER;
結果是:

三、說明
對於某一列是json而言,需要使用內置的函數 json_extract(列名,'$.key') 這個函數有2個參數,第一個參數是json列的列名,第二個參數$.key 其中key為json字符串中某一個key。
