开发中遇到的问题&解决方案(十一)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 前天不是开工嘛,然后刚刚到公司前端说测试环境好像挂了,开工就直接王炸了,找了运维,运维说服务器过年关机了回来发现有个配件坏了,暂时修不好。那我就本地部署一套当测试环境用,我同步了一份生产库到本地,然后问题就来了,之前好好的功能全部出现了问题,因为年前有需求改动,debug了好几遍代码也没有查出问题,然后突然想到MySQL版本不对。

微信截图_20220531133417.png

「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战

前言

前天不是开工嘛,然后刚刚到公司前端说测试环境好像挂了,开工就直接王炸了,找了运维,运维说服务器过年关机了回来发现有个配件坏了,暂时修不好。那我就本地部署一套当测试环境用,我同步了一份生产库到本地,然后问题就来了,之前好好的功能全部出现了问题,因为年前有需求改动,debug了好几遍代码也没有查出问题,然后突然想到MySQL版本不对。


一.问题所在:版本引起的JSON函数导致,本地MySql版本8.0.2,生产环境版本5.0.3


1.先了解一下MySql里的JSON函数


1)JSON_EXTRACT, 使用形式JSON_EXTRACT(json,json_path),从json里提取内容,第一位是存储在数据库里json字符串,第二位是想要提取的内容key,就像在java里从JsonObject里获取相应的值一样,key(value)的形式,而问题就出自这里,而一般单表不会出现问题,出现问题一般是表连接查询的时候,作为取值的key对应的value与其他表做了关联。

先看看简单示例,熟悉一下用法,从[10,20,[30,40]]的json字符串里获取第2个元素,注意这里是从0开始

执行结果:

微信截图_20220531143208.png

2.主表和关联表的字段设计以及执行结果


1)主表

微信截图_20220531143243.png

2)关联表微信截图_20220531143422.png

3)执行sql

sql_1:select JSON_EXTRACT(json.json_str,"$.fileList") as colum from main_test mian LEFT JOIN json_test json on mian.id=json.extend_id

执行结果:

微信截图_20220531143321.png

4)问题出现点,如果MySql版本是5.0.3的那么JSON_EXTRACT后是取出来的值是正常的,但是如果是8.0.2的取出来的值是带“”的,如果取的值作为表连接on后面的其一,那么数据肯定查询不出来


5)针对4)的问题,如果MySql版本是8以上的,使用JSON_EXTRACT时正确的使用方式是 replace(JSON_EXTRACT(json,json_path),'"','')替换掉双引号


小结

针对日常开发中出现代码不动,环境变动产生的bug,特别要注意版本问题,我也是多次的强调过这个问题,但是有时候还是会忘记,还是得多加深记忆才行,之前java版本升级到8,做分布式项目时组与组之间dubbo版本的不同这些都是版本引起的问题。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
设计模式 安全 关系型数据库
PHP开发涉及一系列步骤和技术
【7月更文挑战第2天】PHP开发涉及一系列步骤和技术
137 57
|
4月前
|
存储 数据可视化 数据库
基于SpringBoot+Vue的商业辅助决策系统的设计与实现(源码+部署说明+演示视频+源码介绍)(2)
基于SpringBoot+Vue的商业辅助决策系统的设计与实现(源码+部署说明+演示视频+源码介绍)
47 1
|
4月前
|
Java 关系型数据库 测试技术
基于SpringBoot+Vue的商业辅助决策系统的设计与实现(源码+部署说明+演示视频+源码介绍)(1)
基于SpringBoot+Vue的商业辅助决策系统的设计与实现(源码+部署说明+演示视频+源码介绍)
44 1
|
4月前
|
负载均衡 安全 测试技术
基于SpringBoot+Vue的商业辅助决策系统的设计与实现(源码+部署说明+演示视频+源码介绍)(3)
基于SpringBoot+Vue的商业辅助决策系统的设计与实现(源码+部署说明+演示视频+源码介绍)
51 0
|
6月前
|
前端开发 JavaScript 小程序
系统刷JavaScripit 构建前端体系(语法篇)
系统刷JavaScripit 构建前端体系(语法篇)
39 1
|
新能源
会后分享 | 精选十二:整车性能开发解决方案
本文由上海安世亚太公司汽车行业技术经理章敏先生在新能源汽车研讨会上所发表的演讲,此内容详细地讲解了整车性能开发解决方案。
会后分享 | 精选十二:整车性能开发解决方案
|
存储 安全 区块链
区块链游戏系统开发(开发详细)/案例开发/设计功能/逻辑方案/源码平台
  区块链游戏系统开发是一个复杂而精密的过程。首先,需要进行需求分析和规划,确定游戏系统的功能和特性。然后,进行技术选型和架构设计,选择适合的区块链平台和开发工具。接下来,进行系统的搭建和编码,实现游戏逻辑和用户交互功能。最后,进行测试和优化,确保系统的稳定性和性能。
【C#编程最佳实践 十九】与文件相关的操作
【C#编程最佳实践 十九】与文件相关的操作
97 0
|
运维 监控 前端开发
带团队后的日常思考(十一)
带团队后的日常思考(十一)
|
数据采集 存储 监控
谈谈企业中参考数据的管理
对于业务和技术人员不来说,参考数据会影响日常业务的运营。为了优化数据的使用和可用性,我们需要知道什么是参考数据,什么不是(即主数据),为什么它很重要,以及如何用技术手段有效地管理它。
谈谈企业中参考数据的管理