一、MySQL JSON類型概述
MySQL 5.7版本及以上開始支持JSON數據類型,通過這種類型,用戶可以存儲和查詢JSON數據。
JSON(JavaScript Object Notation)是一種輕量級的數據格式,數據結構簡潔清晰,易於閱讀和編寫。
二、MySQL JSON類型長度
JSON類型的最大存儲空間與LONGTEXT相同,即2^32-1個字符。
我們可以通過以下代碼查詢JSON類型所需的空間大小:
SHOW VARIABLES LIKE 'max_allowed_packet';
三、MySQL的JSON數據類型
在MySQL中,JSON類型有兩種實現方式:
1、存儲為字符串:將JSON數據存儲為字符串類型,通過JSON函數進行處理。
CREATE TABLE person ( id int PRIMARY KEY, info json ); INSERT INTO person (id,info) VALUES(1,'{"name":"bob","age":18}'); SELECT info->>"$.name" AS name FROM person WHERE id=1;
2、存儲為二進制:將JSON數據存儲為二進制類型,通過JSON函數進行處理。相比較於存儲為字符串類型,會佔用更少的存儲空間。
CREATE TABLE person ( id int PRIMARY KEY, info json ) ROW_FORMAT=DYNAMIC; INSERT INTO person (id,info) VALUES(1,'{"name":"bob","age":18}'); SELECT info->>"$.name" AS name FROM person WHERE id=1;
四、MySQL JOIN類型
在MySQL中,JSON類型也可以用於JOIN操作。相比較與傳統關係型數據庫,JSON類型的JOIN會更加靈活,且避免了複雜的數據轉換操作。
CREATE TABLE person ( id int PRIMARY KEY, info json ); CREATE TABLE pet ( id int PRIMARY KEY, person_id int, info json, FOREIGN KEY (person_id) REFERENCES person(id) ); INSERT INTO person (id,info) VALUES(1,'{"name":"bob","age":18}'); INSERT INTO pet (id,person_id,info) VALUES(1,1,'{"name":"tom","type":"cat"}'); SELECT person.info->>"$.name" AS person_name, pet.info->>"$.name" AS pet_name FROM person JOIN pet ON person.id=pet.person_id;
五、MySQL INT類型
MySQL也支持在JSON類型中存儲數字類型的數據,可以通過JSON的CAST函數將數組類型轉換為INT類型。
CREATE TABLE demo ( id int PRIMARY KEY, scores json ); INSERT INTO demo (id,scores) VALUES(1,'[98,72,85]'); SELECT CAST(scores->"$[0]" AS SIGNED) AS score_1 FROM demo;
六、MySQL的JS類型
MySQL 5.7版本及以上也支持一些基本的JavaScript函數,可以在JSON類型中執行JavaScript代碼。
SELECT JSON_OBJECT('score', 95, 'pass', IF(95 > 60, 'true', 'false')) AS result;
七、MySQL的NUM類型
MySQL沒有NUM類型,但可以通過JSON類型來模擬實現,常見的方法是將每一個數字存儲為字符串類型。
CREATE TABLE demo ( id int PRIMARY KEY, nums json ); INSERT INTO demo (id,nums) VALUES(1,'["1","2","3"]'); SELECT SUM(CAST(nums->"$[0]" AS SIGNED)) AS result FROM demo;
八、MySQL JSON類型的壞處
使用MySQL JSON類型的壞處主要有以下幾點:
1、不支持全文索引:MySQL的JSON類型不支持全文索引,需要單獨建立全文索引。
2、不支持標準化:MySQL的JSON類型會使得數據難以標準化,不同的開發者會對JSON的結構有不同的解讀。
3、對於某些複雜的查詢,性能會差於傳統的關係型數據庫,需要進行深入的優化和分析。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/206093.html