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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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
目录
相关文章
|
开发者
氚云丨开发课— 05 后端代码调试与业务对象操作| 学习笔记
快速学习氚云丨开发课— 05 后端代码调试与业务对象操作。
|
1天前
|
存储 JSON 关系型数据库
【亲测有用】数据中台数据集成管理能力演示
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
【亲测有用】数据中台数据集成管理能力演示
|
新能源
会后分享 | 精选十二:整车性能开发解决方案
本文由上海安世亚太公司汽车行业技术经理章敏先生在新能源汽车研讨会上所发表的演讲,此内容详细地讲解了整车性能开发解决方案。
会后分享 | 精选十二:整车性能开发解决方案
|
10月前
|
缓存 监控 负载均衡
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
171 2
|
10月前
|
存储 缓存 监控
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据更新场景策略和方案分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据更新场景策略和方案分析)
114 0
|
前端开发 API 数据处理
TienChin 项目改造完善&项目结构分析
Banner 生成网站:https://bootschool.net/ascii
145 0
|
XML JSON 前端开发
【C#编程最佳实践 十三】接口测试实践
【C#编程最佳实践 十三】接口测试实践
119 0
|
前端开发 安全 测试技术
【C#编程最佳实践 十二】前后端分离的思考
【C#编程最佳实践 十二】前后端分离的思考
240 0
|
区块链
佛萨奇源码版丨佛萨奇2.0Metaforce系统开发功能方案/案例详细/方案项目/源码程序
  一条完整的区块链,是由众多分布式账本集合而成的一种数据链。那么随着其中某个账本的记录完成,区块也就随之生成。区块的生成过程也就可以理解为是交易的一个记账过程。但光有区块还是不够的,还得需要“链”将所有已有区块都连起来。那么所谓的“链”,就是时间戳技术以及某种智能合约。
|
缓存 JSON 前端开发
腾讯开源的 hel 提供了加载远程模块的能力,谈谈它的实现原理
腾讯开源的 hel 提供了加载远程模块的能力,谈谈它的实现原理
204 0