ITPub博客

首页 > 数据库 > 数据库开发技术 > MySQL8.0.32版本一个严重Bug及解决方案

MySQL8.0.32版本一个严重Bug及解决方案

原创 数据库开发技术 作者:DBA札记 时间:2024-02-04 01:39:19 0 删除 编辑

前言

最近业务反馈,8.0.32在使用union和union all的过程中,发现含有中文等特殊字符时查询返回数据为空。这个影响是比较严重的。

具体可参考芬达写的文章《实战——研究一个 MySQL8.0.32 优化器的严重 Bug》,文章的群友就是我本人,哈哈哈……

Bug 影响版本范围

目前只发现8.0.32版本,其他版本目前没有。但是一些分支版本也受到了影响,比如percona8.0.32,所以大家要结合自己的环境排查一下。

解决方案

1、关闭条件下推

set optimizer_switch="derived_condition_pushdown=off";

2、升级版本
MySQL从8.0.16 版本开始,将原来mysql_upgrade的功能内置到MySQL Server的启动过程中。所以从这个版本以后,更换需要升级的二进制文件,重启服务即可完成升级。

个人更推荐第二中方式升级到8.0.33及以上8.0的小版本。

Bug 修复代码简单解析 (仅供有兴趣的读者参考)

我们查看官方bug修复的commit就发现,这个bug其实只改了一行代码。惊不惊喜,意不意外?哈哈哈……

翻了一下代码,这个位置主要是条件下推这个类的一个成员函数,用于解析结果。

修改后的代码加了字符集处理。


欢迎关注公众号:DBA札记,一起交流数据库技术。欢迎觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!谢谢大家。

原文作者:DBA札记;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-01-18

  • 博文量
    90
  • 访问量
    40027