当前位置: 首页 > wzjs >正文

网站平台建设呈现全新亮点七台河新闻联播2022视频

网站平台建设呈现全新亮点,七台河新闻联播2022视频,免费虚拟主机管理系统下载,网页制作的步骤在数据库设计中,有时我们会将 JSON 数据存储在 VARCHAR 或 TEXT 类型字段中。这种方式虽然灵活,但在查询时需要特别注意。本文将详细介绍如何在 MySQL 中有效查询存储为 VARCHAR 类型的 JSON 数据。 一、问题背景 当 JSON 数据存储在 VARCHAR 列中时&a…

在数据库设计中,有时我们会将 JSON 数据存储在 VARCHAR 或 TEXT 类型字段中。这种方式虽然灵活,但在查询时需要特别注意。本文将详细介绍如何在 MySQL 中有效查询存储为 VARCHAR 类型的 JSON 数据。

一、问题背景

当 JSON 数据存储在 VARCHAR 列中时,常见的数据格式如下:

[{"id":"1905555466980773889","hasPermission":true},{"id":"1905547884060835841","hasPermission":false}
]

我们需要查询这个 JSON 数组中是否包含特定 ID 的对象。

二、MySQL JSON 函数

MySQL 5.7+ 版本提供了丰富的 JSON 处理函数,即使数据类型是 VARCHAR,只要内容是有效的 JSON,我们仍然可以使用这些函数:

2.1 常用 JSON 函数

  • JSON_CONTAINS(target, candidate[, path]): 检查 JSON 文档是否包含特定值
  • JSON_EXTRACT(json_doc, path): 从 JSON 文档中提取值
  • JSON_OBJECT(key, val[, key, val]...): 创建 JSON 对象
  • JSON_ARRAY(val[, val]...): 创建 JSON 数组
  • JSON_VALID(json_doc): 验证字符串是否为有效的 JSON

三、查询示例

3.1 基本查询

查询 JSON 数组中包含特定 ID 的记录:

SELECT * FROM sys_user
WHERE app_ids IS NOT NULLAND app_ids != ''AND JSON_CONTAINS(app_ids, JSON_OBJECT('id', '1905555466980773889'));

3.2 查询多个 ID

SELECT * FROM sys_user
WHERE app_ids IS NOT NULLAND app_ids != ''AND (JSON_CONTAINS(app_ids, JSON_OBJECT('id', '1905555466980773889'))OR JSON_CONTAINS(app_ids, JSON_OBJECT('id', '1905547884060835841')));

3.3 使用 JSON_OVERLAPS (MySQL 8.0+)

SELECT * FROM sys_user
WHERE app_ids IS NOT NULLAND app_ids != ''AND JSON_OVERLAPS(app_ids, JSON_ARRAY(JSON_OBJECT('id', '1905555466980773889'),JSON_OBJECT('id', '1905547884060835841')));

3.4 查询特定权限的记录

SELECT * FROM sys_user
WHERE app_ids IS NOT NULLAND app_ids != ''AND JSON_CONTAINS(app_ids, JSON_OBJECT('id', '1905555466980773889', 'hasPermission', true));

四、避免常见错误

4.1 空值处理

JSON_CONTAINS 函数在处理 NULL 或空字符串时会报错,所以需要先排除这些情况:

-- 错误做法
SELECT * FROM sys_user WHERE JSON_CONTAINS(app_ids, JSON_OBJECT('id', '123'));-- 正确做法
SELECT * FROM sys_user 
WHERE app_ids IS NOT NULL AND app_ids != '' AND JSON_CONTAINS(app_ids, JSON_OBJECT('id', '123'));

4.2 JSON 格式匹配

确保 JSON_CONTAINS 的第二个参数结构与目标 JSON 中的结构匹配:

-- 错误做法 (直接传入 ID 字符串)
SELECT * FROM sys_user WHERE JSON_CONTAINS(app_ids, '"1905555466980773889"');-- 正确做法 (创建与数组元素匹配的对象)
SELECT * FROM sys_user WHERE JSON_CONTAINS(app_ids, JSON_OBJECT('id', '1905555466980773889'));

4.3 确保 JSON 有效性

添加 JSON_VALID 检查确保字段内容是有效的 JSON:

SELECT * FROM sys_user
WHERE app_ids IS NOT NULLAND app_ids != ''AND JSON_VALID(app_ids) = 1AND JSON_CONTAINS(app_ids, JSON_OBJECT('id', '1905555466980773889'));

五、在 MyBatis Plus 中的应用

5.1 基本查询

LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.isNotNull(SysUser::getAppIds).ne(SysUser::getAppIds, "").apply("JSON_CONTAINS(app_ids, JSON_OBJECT('id', {0}))", "1905555466980773889");List<SysUser> userList = sysUserMapper.selectList(queryWrapper);

5.2 多条件查询

QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
queryWrapper.isNotNull("app_ids").ne("app_ids", "").apply("JSON_VALID(app_ids) = 1").apply("JSON_CONTAINS(app_ids, JSON_OBJECT('id', {0}))", "1905555466980773889");// 如果还要根据权限过滤
queryWrapper.apply("JSON_CONTAINS(app_ids, JSON_OBJECT('id', {0}, 'hasPermission', {1}))", "1905555466980773889", true);

5.3 查询多个 ID

LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.isNotNull(SysUser::getAppIds).ne(SysUser::getAppIds, "").and(w -> w.apply("JSON_CONTAINS(app_ids, JSON_OBJECT('id', {0}))", "1905555466980773889").or().apply("JSON_CONTAINS(app_ids, JSON_OBJECT('id', {0}))", "1905547884060835841"));List<SysUser> userList = sysUserMapper.selectList(queryWrapper);

六、性能优化建议

  1. 考虑使用 JSON 类型:如果您的 MySQL 版本是 5.7+,考虑使用原生 JSON 类型代替 VARCHAR,这样可以获得更好的性能和功能支持。

  2. 添加索引:虽然无法直接为 JSON 内容创建索引,但可以使用生成的列和函数索引:

    ALTER TABLE sys_user ADD COLUMN app_id_extracted JSON GENERATED ALWAYS AS (JSON_EXTRACT(app_ids, '$[*].id')) VIRTUAL;ALTER TABLE sys_user ADD INDEX idx_app_id_extracted (app_id_extracted);
    
  3. 定期维护:对于大表,定期 OPTIMIZE TABLE 有助于维护性能。

七、总结

在 MySQL 中查询 VARCHAR 类型的 JSON 数据时,关键是:

  1. 使用 JSON_CONTAINS 函数并构造正确的 JSON 结构进行匹配
  2. 处理好 NULL 和空字符串
  3. 验证 JSON 有效性
  4. 在 MyBatis Plus 中使用 apply 方法添加原生 SQL 条件

正确使用这些技术可以有效地查询和处理 VARCHAR 中存储的 JSON 数据。


文章转载自:

http://9hYAC1wu.wfbnp.cn
http://xbteLhAe.wfbnp.cn
http://G0lyBPFf.wfbnp.cn
http://iIQCrnrc.wfbnp.cn
http://xYAWDdAi.wfbnp.cn
http://LfrPoCWd.wfbnp.cn
http://pkMQjEVF.wfbnp.cn
http://FBObzFCv.wfbnp.cn
http://qtepxiHG.wfbnp.cn
http://6uBfaGQk.wfbnp.cn
http://rBwDBgtg.wfbnp.cn
http://1j6b1gPk.wfbnp.cn
http://t1OTGmlZ.wfbnp.cn
http://BFLSfbYL.wfbnp.cn
http://3leF1GCP.wfbnp.cn
http://SpTO36LR.wfbnp.cn
http://SuZMjgk5.wfbnp.cn
http://ZLytE866.wfbnp.cn
http://fyDKgk0v.wfbnp.cn
http://yse0qRhU.wfbnp.cn
http://r2cM8ESz.wfbnp.cn
http://7K80oXwO.wfbnp.cn
http://CPPtuDdt.wfbnp.cn
http://IkYuyfRU.wfbnp.cn
http://MWnhslb3.wfbnp.cn
http://Lg5NFHdg.wfbnp.cn
http://noaRO9Hg.wfbnp.cn
http://nfDLSxuE.wfbnp.cn
http://NPWNtSLM.wfbnp.cn
http://ds2nJz2z.wfbnp.cn
http://www.dtcms.com/wzjs/653809.html

相关文章:

  • 长白山网站学做管理手机怎么创建网页
  • 企业网站网上推广的途径html中文美食网站
  • 站群管理软件站长素材音效网
  • 斗蟋蟀网站建设在线教育平台
  • 建网站买空间flash网站制作公司
  • 涉密项目单位网站建设流程成都营销型网站建设推广
  • wordpress 企业站园区网站建设需求调研报告
  • 网站 商城 app 建设厦门某某公司网站
  • 四川大良网站建设大型电商网站开发实践
  • 营口市网站建设新闻门户网站制作
  • 钱网站制作吧网站做软件的软件下载
  • 快递网站怎么制作国际军事最新头条新闻
  • 做网站工作条件网站的内容规划怎么写
  • 学生班级优化大师宁波外包seo服务
  • 巩义网站建设价格软件开发公司照片
  • 网站空间域名购买江苏省建设执业资格中心网站
  • 自适应网站运动div如何设置的关键字有哪些
  • 网站空间登陆广告模板免费
  • 网站开发考研是什么专业个人特种证件查询网站
  • 想做网站 优帮云盐城做网站哪家最好
  • 美食类网站模板网站建设求职简历模板下载
  • 高流量网站设计2345网址大全电视剧
  • 做视频哪个网站收入高如何做网络推广网站
  • 电子商务网站的主要评价指标有华为公司网站建设目标
  • 建设网站平台费wordpress 评论排序
  • 山东建设官方网站app 快速开发平台
  • 用dw制作个人网站亿网网络科技有限公司
  • 东坑做网站莆田网站建设建站系统
  • 徐州h5建站模板网站分享功能怎么做
  • 汕头模板建站代理怎么做网页?