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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 前天不是开工嘛,然后刚刚到公司前端说测试环境好像挂了,开工就直接王炸了,找了运维,运维说服务器过年关机了回来发现有个配件坏了,暂时修不好。那我就本地部署一套当测试环境用,我同步了一份生产库到本地,然后问题就来了,之前好好的功能全部出现了问题,因为年前有需求改动,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版本的不同这些都是版本引起的问题。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8月前
|
新零售 供应链 数据挖掘
推三返一系统开发|成熟案例|源码部署
“新零售”的商业生态构建将涵盖网上页面
|
5月前
|
前端开发 程序员 API
从后端到前端的无缝切换:一名C#程序员如何借助Blazor技术实现全栈开发的梦想——深入解析Blazor框架下的Web应用构建之旅,附带实战代码示例与项目配置技巧揭露
【8月更文挑战第31天】本文通过详细步骤和代码示例,介绍了如何利用 Blazor 构建全栈 Web 应用。从创建新的 Blazor WebAssembly 项目开始,逐步演示了前后端分离的服务架构设计,包括 REST API 的设置及 Blazor 组件的数据展示。通过整合前后端逻辑,C# 开发者能够在统一环境中实现高效且一致的全栈开发。Blazor 的引入不仅简化了 Web 应用开发流程,还为习惯于后端开发的程序员提供了进入前端世界的桥梁。
526 0
|
8月前
|
新零售 搜索推荐 大数据
二二复制公排系统开发|成熟案例|项目原理
新零售的意思是应用新互联网技术和新思维的活动
|
8月前
|
自然语言处理 搜索推荐 算法
Metaforce佛萨奇2.0丨3.0系统开发稳定版/需求设计/功能说明/案例项目/逻辑方案/源码程序
Metaforce佛萨奇系统是一个基于人工智能技术的虚拟助手系统,
|
敏捷开发 测试技术
推三返一开发稳定版丨推三返一项目系统开发详细指南/方案需求/步骤逻辑/流程功能/案例设计/技术架构/源码程序
推三返一系统开发是一种软件开发模式,也被称为迭代增量开发模式。它是一种敏捷开发方法的一种,通过将整个开发过程分为多个迭代周期,每个周期都会增加新的功能和特性,并在每个迭代周期结束后进行测试、反馈和修改。推三返一系统开发的核心思想是“推进三步,反馈一步”。
潮玩元宇宙大逃杀游戏系统开发稳定版/案例设计/详细功能/需求逻辑/源码项目
The development rules of virtual reality game systems, especially the metaverse escape game system, can vary depending on specific designs and requirements. The following are some common development rules and considerations that may include
|
运维 监控 前端开发
带团队后的日常思考(十一)
带团队后的日常思考(十一)
|
消息中间件 前端开发 Java
开发中遇到的问题&解决方案(十二)
由于之前做过贷款平台和电商平台,所以对于订单这个东西十分的敏感,有段时间有点疯狂的喜欢逮着京东、淘宝、拼多多的订单页看,思考别人在做的购物车和订单这块是怎么实现的,尝试找找Bug什么的,后面出去面试别人看我的项目也会问一些关于订单如何设计和实现的问题,所以感觉这个东西还是有讲的必要,下面进入主题。
253 0
开发中遇到的问题&解决方案(十二)
|
开发框架 JavaScript 算法
# 每个前端同学都可以拥有自己的框架,然后去完善它——Strvejs@3.1.0正式发布 #
# 每个前端同学都可以拥有自己的框架,然后去完善它——Strvejs@3.1.0正式发布 #
# 每个前端同学都可以拥有自己的框架,然后去完善它——Strvejs@3.1.0正式发布 #
|
JSON 资源调度 前端开发
从0到1教你搭建前端团队的组件系统(高级进阶必备)
随着vue/react这类以数据驱动为主的web框架的不断完善和壮大,越来越多的前端团队开始着手搭建内部的组件库。虽然目前市面上已经有很多功能强大且完善的组件库供我们使用,比如基于react的开源组件库ant-design,material,又比如基于vue的开源组件库elementUI,iView等。
853 0