SET和JSON类型学习

MySQL JSON数据类型全解析(JSON datatype and functions) JSON(JavaScript Object Notation)是一种常见的信息交换格式,其简单易读且非常适合程序处理。MySQL从5.7版本开始支持JSON数据类型,本文对MySQL中JSON数据类型的使用进行一个总结。在MySQL中,JSON数据是以字符串形式表现的,但是它有自己的解析规则,利用某些途径可以将字符串转换为JSON类型数据,这个过程叫做规范化(normalization),在规范化过程中,MySQL会对数据格式进行验证,若字符串不是有效的JSON格式,那么就会报错。 阅读详情

文章背景:

        公司新增需求:新增一个开放权限范围authRole,一开始得想法是直接使用string存储,后来前端说不可以使用明文,不可以传入"学生、老师"这样 ​ 传入得参数最勉强也是"1、4",这里继续使用string类型的话,在进行模糊查询的时候就会出现一个错误,例如在查询权限包含1的数据时,包含11的也会被查询出来 ​ 不符合需求,然后看着这些静态变量萌生了一个想法是否可以使用set类型,然后开始学习set,问为什么不多加一个管理表,首先我是在别人的代码基础上改的,新增 一个表我觉得很麻烦,而且只是新增一个字段就多加一个表我觉得不太好。所以我想着试试可不可以使用SET类型。

SET类型

        SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)间隔开。所以SET成员值本身不能包含逗号。SET最多可以有64个不同的成员,当创建表时,SET成员值的尾部空格将自动被删除;当检索时,保存在SET列的值使用列定义中所使用的大小写来显示。请注意可以为SET列分配字符集和校对规则。对于二进制或大小写敏感的校对规则,当为列分配值时应考虑大小写。(官方解释,不懂没事直接看例子)

如何定义SET类型

 

CREATE TABLE `set_tabless` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `auth_role` SET('value1','value2','value3','value4','value5','value6','value7','value8','value9','value10') DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

如何插入数据

INSERT INTO set_tabless(`auth_role`) VALUES ('value1');
INSERT INTO set_tabless(`auth_role`) VALUES ('value2');
INSERT INTO set_tabless(`auth_role`) VALUES ('value3');
INSERT INTO set_tabless(`auth_role`) VALUES ('3');
INSERT INTO set_tabless(`auth_role`) VALUES ('5');
INSERT INTO set_tabless(`auth_role`) VALUES ('1');

新增结果

                ​​​​​​​        ​​​​​​​        

通过上面的插入数据例子就能看出来set底层用的是二进制存储,如下面列表

SET成员十进制二进制
value110001
value220010
value340100

如何查询数据

SELECT * FROM set_tabless WHERE FIND_IN_SET('value1',auth_role)>0;   //包含value1的都会查询出来不包括16

SELECT * FROM set_tabless WHERE auth_role LIKE '%1%';  //模糊查询包含value1的都会查询出来
/**
官方解释 :第1个语句找出SET_col包含value set成员的行。第2个类似,但有所不同:它在其它地方找出set_col包含value的行,甚至是在另一个SET成员的子字符串中。
**/

SELECT * FROM set_tabless WHERE auth_role & 5;   //包含value1和value3的都会查询出来不包括16,寻找包含第1个set成员的值

SELECT * FROM set_tabless WHERE auth_role = 1;    //精确查询,只会查出来只包含value1

/**
官方解释 :第1个语句寻找包含第1个set成员的值。第2个语句寻找一个确切匹配的值。应注意第2类的比较。将set值与'val1,val2'比较返回的结果与同'val2,val1'比较返回的结果不同。指定值时的顺序应与在列定义中所列的顺序相同。如果想要为SET列确定所有可能的值,使用SHOW COLUMNS FROM tbl_name LIKE set_col并解析输出中第2列的SET定义。
**/

 

学完了SET类型的用法回到业务需求 这里我主要是想要实现拓展性auth_role          SET('value1','value2','value3','value4','value5','value6','value7','value8','value9','value10') DEFAULT NULL, 这里只需要到value10就可以存储到512,这里权限可以存1,可以存4,也可以存1、4,也能存3,但是不能存储1、3(也可能是我没想到) 所以我只能放弃,开始了解JSON

JSON:从MySQL 5.7.8开始支持原生JSON(RFC 7159规范定义)数据类型,可以更加高效的存储和管理JSON文档。与在字符数据类型中存储json数据相比,原生JSON数据类型提供了自动的格式验证以及优化的存储格式,可以快速访问文档中的元素节点。JSON数据最大长度不能超过max_allowed_packet的限制。

 

如何定义JSON类型

CREATE TABLE EXAMPLES (
  id INT AUTO_INCREMENT PRIMARY KEY,
  DATAS JSON
);

如何插入数据

这里存储数组,也可以存储对象
INSERT INTO EXAMPLE (DATA) VALUES ('[1]');
INSERT INTO EXAMPLE (DATA) VALUES ('[2]');
INSERT INTO EXAMPLE (DATA) VALUES ('[3]');
INSERT INTO EXAMPLE (DATA) VALUES ('[4]');
INSERT INTO EXAMPLE (DATA) VALUES ('[1,2]');
INSERT INTO EXAMPLE (DATA) VALUES ('[1,3]');
INSERT INTO EXAMPLE (DATA) VALUES ('[2,3]');
INSERT INTO EXAMPLE (DATA) VALUES ('[11]');

 

           ​​​​​​​        ​​​​​​​        ​​​​​​​​​​​​​​        ​​​​​​​        

查询数据

SELECT * FROM `example` WHERE JSON_CONTAINS(`data`, JSON_ARRAY(1));//这里会查询出来全部包含1数据

学会了开始实践

//实体类
public class Example {
    private Integer id;
    private List<Integer> data;
    private String datas; 
/**
为什么还要多此一举设置一个datas呢,是因为mybatis不支持json类型,像sql语句直接插入的就是一个集合,mybatis这里需要将前端传进来集合转为json字符串,将json字符串存进数据库,查询的时候也是,将查询出来的data赋给datas,然后json字符串转数组赋给data,传给前端
**/
	<resultMap id="ExampleEntityMap" type="com.cy.rs.entity.Example">
        <id column="id" property="id"></id>
        <result column="data" property="datas"></result>
    </resultMap>
    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO
            example (
            data
        ) VALUES
            (#{datas})
    </insert>
    <select id="select" resultMap="ExampleEntityMap">
        SELECT * FROM example WHERE  JSON_CONTAINS(data, JSON_ARRAY(#{data}));
    </select>	

 本文仅供参考,是自己的一篇小笔记,可能存在很多错误

将JavaScript中的Set转换为JSON格式 总结一下,要将JavaScript中的Set对象转换为JSON格式的字符串,我们可以使用JSON.stringify()方法将Set对象转换为数组,然后再将该数组转换为JSON格式的字符串。要将JSON格式的字符串转换回Set对象,我们可以使用JSON.parse()方法将JSON格式的字符串解析为数组,然后使用Set构造函数将该数组转换为Set对象。在上面的代码中,我们使用JSON.parse()方法将JSON格式的字符串解析为一个数组,然后使用Set构造函数将该数组转换为Set对象。 阅读详情

相关推荐

思澈sdk-新建lcd

co5300至此有3个同ID的驱动,在co5300xxxx.c的LCD_DRIVER_EXPORT(co5300, LCD_ID, &lcdc_int_cfg, &CO5300_drv, LCD_PIXEL_WIDTH, LCD_PIXEL_HEIGHT, 2);2 在customer\peripherals\Kconfig_lcd中添加如下配置(注意修改的地方有两个LCD_USING_TFT_CO5300_143)5 在该文件中的config LCD_DPI配置项下添加:(这里300为DPI)

gongyuan073的专栏 1391

深入浅出MySQL json_set函数

这个例子中,我们将users表的user_info字段中的age字段更新为26。JSON_SET函数的第一个参数为user_info,表示需要更新的JSON文档。json_set函数是MySQL 5.7版本引入的,它用于更新某个JSON文档中的数据。在这个例子中,我们将users表的user_info字段中的name字段和age字段同时进行更新。JSON_SET函数的第一个参数为user_info,表示需要更新的JSON文档。json_set函数支持更新多个JSON字段,我们可以一次性更新多个字段。

while_int的博客 6569

【DAB收音机】DAB 认证介绍

DAB 认证ESTI 标准文档: ETSI 103461实际过认证时,需要根据产品的受众国家及区域,参考当地官方是否有国内认证协议。需要参考当地文档进行功能开发。例如:阿联酋地区用《UAE.S 5021 _ 2018.pdf》标准进行认证。ESTI 的DAB认证协议规定了家用和车载数字无线电的最低要求,及其对应的测试方法,是数字无线电认证标志规定的技术基础。本文以车载数字无线电接收器为例,进行部分DAB认证的介绍,详情请见官方文档。或联系博主获取DAB ESTI 103461的中文翻译资料。

qq_15271231的博客 1219

MySQL中json_set()函数的使用

json_set()这个函数在我看来,好像具备两个作用,一个是插入作用,能替代json_insert()函数,另一个就是替换作用,能替代json_replace()函数。下面具体来看: 插入作用: 数据库中 id =16的数据如下所示: 使用json_insert()函数后,如下所示,插入了age:30 接下来使用json_set()函数,向 id =16的data中添加hobby,(注:这里可能有些伙伴会好奇,上面添加了age,我再添加一个hobby,为什么age不见了,这是因为我用的是select

weixin_44078354的博客 1万+

PMSM无感foc控制(滑模-反正切-PLL)【仿真模型搭建教程】(附模型)

本文主要目的是教大家如何把文献中的公式转换成仿真模型。 首先介绍滑模控制的原理及如何搭建simulink模型。 1.1基于反电势估计位置原理 永磁同步电机在静止坐标系αβ下的电压方程: 扩展反电动势包含转子位置信息,并且αβ轴下扩展反电动势的反正切函数正好就等于位置角theta。 1.2 滑模控制原理(比较重要的点是以电机电流模型推导展开) 通过滑模观测得到鲁棒性比较高的αβ轴下扩展反电动势,并求其反正切函数,得到位置信息。 /*********************...

weixin_44769876的博客 1万+

国科大 雁栖湖校区 研一上 课程避坑与生存指南

本文为国科大雁栖湖校区研一新生提供全面的课程避坑与生存指南,涵盖选课策略、核心课程学习技巧、校园生活攻略及心态管理。重点解析算法设计与分析、人工智能原理等硬核课程的学习方法,并分享食堂、住宿、自习室等实用生存技巧,帮助新生高效适应研究生生活。

weixin_29304985的博客 302

数组、List、Set、Map的json怎么写

打开Postman,操作如图: 现在最主要的是如何填写json,下面给出数组、List、Set、Map基本序列化与日期格式化的示例代码,按需求修改代码; 先下载fastjson,链接如下: 链接:https://pan.baidu.com/s/1e-HwNFVV4Ucg9Vi4CL8J_w 提取码:c20x import com.alibaba.fastjson.JSON; import j...

睶 2万+

自抗扰控制(ADRC)原理与MATLAB实现详解

自抗扰控制(ADRC)是一种先进的鲁棒控制策略,其核心在于通过扩张状态观测器(ESO)实时估计并补偿系统总扰动。相比传统PID控制,ADRC不依赖精确数学模型,特别适合处理非线性、时变系统。从控制原理看,ADRC将系统内部动态和外部扰动统一建模,通过带宽参数化方法实现快速响应与强抗扰能力。在工程实践中,ADRC已成功应用于无人机飞控、伺服系统等场景,MATLAB仿真显示其上升时间可比PID提升46%,抗扰动恢复时间缩短60%。典型实现包含ESO设计、扰动补偿和PD控制三部分,参数整定遵循ω₀=3~5倍系统带

weixin_33585822的博客 95

MYSQL常用的JSON函数 JSON_SET,JSON_KEY

update t_json set content = JSON_SET(content,'\$.id',1); update t_json set content = JSON_SET(content,'\$.name','jack'); update t_json set content = JSON_SET(content,'$.wife',JSON_OBJECT('name','zhang','age',24));

weixin_48470176的博客 2995

基于STM32智能教室灯光照明人数监测系统

本文设计了一套基于STM32和物联网技术的智能教室照明系统,通过光照传感器和双红外对管实现精准人数统计,结合"光照+人数"双条件判断实现按需照明。系统采用"感知-决策-执行-云联"架构,包含环境感知、人数统计、控制执行等模块,支持本地自动控制和手机APP远程管理。测试表明系统能有效避免"长明灯"现象,具有节能降耗、管理智能化的特点。创新点在于双向人数统计算法和双条件控制逻辑,为智慧校园建设提供了实用解决方案。

1162

EtherCAT从站EEPROM组成信息详解(2):字8-15产品标识区

以实际的从站EEPROM数据为例,参照EtherCAT的SII规范,详细分析了从站EEPROM字8-字15的产品标识区内容组成。

kevin1499的博客 719

mysql json 使用

创建 JSON 类似 varchar,设置 JSON 主要将字段的 type 是 json, 不能设置长度,可以是 NULL 但不能有默认值。 data json 插入 JSON INSERT INTO `test` (data) VALUES ('{"name":"tom","age":3}'); 查询 JSON 查询 json 中的数据用 column->path 的形式,其中对象类...

天空之城 338

人工智能训练师(三级)操作技能考核·自测卷

为您定制了一份。这份试卷严格拆分了“业务分析”、“智能训练”、“智能系统设计”、“培训与指导”四大模块,所有填空题均来源于上一轮整理的。您可以先用它进行“第二步(抛开答案自己填)”,填完后对照末尾的答案速查进行“第一步(补全并运行)”的校验,最后标记错题进行“第三步(针对性重复练习)”。

suny8088的博客 106

java组装json_java 中 json的组装

public static void main(String args[]){//生成一个JSONObject对象String data = "{}";JSONObject jsonObj = JSONObject.fromObject(data);//1.put 基本类型值int i=0;for(i=0; i<5; i++){jsonObj.put("id"+i, i);}System.o...

weixin_31589747的博客 1934

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Dart学习笔记

/ 3// 1。

weixin_44164945的博客 791

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MySQL JSON数据类型

JSON(JavaScript Object Notation)主要用于互联网应用服务之间的数据交换。MySQL 支持和两种类型,JSON 类型是从 MySQL 5.7 版本开始支持的功能(),MySQL中使用JSON有以下好处::字段可以无限拓展,避免了ALTER ADD COLUMN的操作,使用更加灵活。:避免了稀疏字段的NULL值,避免冗余存储。:相比于字符串格式的JSON,JSON类型支持索引做特定的查询优化。总体而言,JSON 类型比较适合存储一些,比如用户画像、商品标签、接口数据等。......

琅琊之榜 2万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

mysql json array 转 set 类型

MySQL JSON Array 转 Set 类型 在处理数据时,我们经常需要将 JSON 数组转换为 MySQL 的 set 类型。这是因为 set 类型可以存储多个值,并且可以方便地进行查询和比较。本文将介绍如何在 MySQL 中将 JSON 数组转换为 set 类型,并提供一些实用的代码示例。 JSON 数组简介 J...

weixin_42497828的博客 312

MYSQL JSON的操作函数 -- JSON_SET (), JSON_INSERT(), and JSON_REPLACE()

InMySQL, 有一些函数可以帮我们处理JSON类型包括:JSON_SET(),JSON_INSERT(), andJSON_REPLACE()函数. 语法 三种函数的语法: JSON_SET(json_doc, path, val[, path, val] ...) JSON_INSERT(json_doc, path, val[, path, val] ...) JSO...

Mr.hu 2万+

set集合map集合 JSON.stringify和JSON.parse

Set 1.set里面是不能有重复的 2.有长度 有点类似于数组 set.add("aaa") 添加一项 set.delete("aaa") 删除一项 set.has("aaa") 判断set里面是否有这个元素 set.size 这个是属性 表示个数的意思 set.clear() 清空 // 关于循环 for(let item of arr){} arr.forEach(...

HANGSOME123的博客 1556

MySQL JSON类型字段的查找与更新

MySQL 提供了丰富的函数用于 JSON 类型字段的查找与更新,详见官方文档。 简单记一下使用方法,使用的mysql版本:5.7.28-log: 创建一个表 t1,basic_info 字段为JSON类型: CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `basic_info` json DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=

灵颖桥人的博客 2万+

mysql中json类型字段用法

前言 mysql从5.7.8版本开始原生支持了JSON类型数据,同时可以对JSON类型字段中的特定的值进行查询和更新等操作,通过增加JSON类型的属性可以大大的提高我们在mysql表中存储的数据的拓展性,无需每次新增字段时都进行表结构的调整,下面我们不深入讲解底层的实现原理,我们主要来梳理一下我们在日常工作中使用实践 基本环境 mysql版本:8.0.28 springboot版本: 2.2.2 测试表结构: CREATE TABLE `t_json` ( `id` int unsig

技术人集结地 5850

MySQL学习笔记-JSON数据类型

MySQL支持JSON数据类型,可以高效地访问中的数据,并提供了许多操作的方法。文档是结构化数据库里的概念,学过MongoDB的同学应该知道文档就是指的一条记录,而MongoDB里的一条记录就是一个类似JSON的结构(BSON,Binary JSON)。

2501_92713943的博客 569

MySQL 操作 JSON 数据类型

MySQL 从 v5.7.8 开始支持 JSON 数据类型。 JSON 数据类型和传统数据类型的操作还是有很大的差别,需要单独学习掌握。好在 JSON 数据类型的学习成本不算太高,只是在 SQL 语句中扩展了 JSON 函数,操作 JSON 数据类型主要是对函数的学习。

极客点儿 2068

mysql json类型使用JSON_SET方法修改字段不生效的坑

mysql json字段在insert记录的时候,json类型字段一定要给个初始值。可以是:'{}','[]',或其它不为空不为null的初始值。

tianyacho的专栏 2326

mysql json类型长度限制_MySQL json类型操作

一、方法罗列分类 函数 描述1. 创建jsonjson_array 创建json数组json_object 创建json对象json_quote 将json转为json字符串类型2. 查询jsonjson_contains 判断是否包含某个json值json_contains_path 判断某个路径是否包含json值json_extract 提取json值co...

weixin_42509964的博客 1万+
下一篇: 记录一个关于PageHelper的坑
不早睡不改名@
博客等级 码龄5年 536粉丝 306原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值