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/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

发表回复

登录后才能评论