MySQL JSON類型詳解

一、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-hant/n/206093.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-07 17:49
下一篇 2024-12-07 17:49

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • int類型變量的細節與注意事項

    本文將從 int 類型變量的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變量進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變量。 一、定義與聲明 int…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python基本數字類型

    本文將介紹Python中基本數字類型,包括整型、布爾型、浮點型、複數型,並提供相應的代碼示例以便讀者更好的理解。 一、整型 整型即整數類型,Python中的整型沒有大小限制,所以可…

    編程 2025-04-29
  • Python中的Bool類型判斷

    本篇文章旨在講解Python中的Bool類型判斷。在Python中,Bool類型是經常使用的一種類型,因此掌握其用法非常重要。 一、True和False 在Python中,True…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • JSON的MD5

    在Web開發過程中,JSON(JavaScript Object Notation)是最常用的數據格式之一。MD5(Message-Digest Algorithm 5)是一種常用…

    編程 2025-04-29
  • 使用Java將JSON寫入HDFS

    本篇文章將從以下幾個方面詳細闡述Java將JSON寫入HDFS的方法: 一、HDFS簡介 首先,先來了解一下Hadoop分布式文件系統(HDFS)。HDFS是一個可擴展性高的分布式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • Python函數類型有哪些

    本文將從以下幾個方面詳細闡述Python函數類型。 一、內置函數 Python的內置函數是指在Python編程語言中提供的可以直接使用的函數,不需要通過導入模塊等方式引入。 部分常…

    編程 2025-04-29

發表回復

登錄後才能評論