MySQL8.0.32版本一個嚴重Bug及解決方案

qing_yun發表於2024-02-04

前言

最近業務反饋,8.0.32在使用union和union all的過程中,發現含有中文等特殊字元時查詢返回資料為空。這個影響是比較嚴重的。

具體可參考芬達寫的文章《實戰——研究一個 MySQL8.0.32 最佳化器的嚴重 Bug》,文章的群友就是我本人,哈哈哈……

Bug 影響版本範圍

目前只發現8.0.32版本,其他版本目前沒有。但是一些分支版本也受到了影響,比如percona8.0.32,所以大家要結合自己的環境排查一下。

解決方案

1、關閉條件下推

2、升級版本

MySQL從8.0.16 版本開始,將原來mysql_upgrade的功能內建到MySQL Server的啟動過程中。所以從這個版本以後,更換需要升級的二進位制檔案,重啟服務即可完成升級。

個人更推薦第二中方式升級到8.0.33及以上8.0的小版本。

Bug 修復程式碼簡單解析 (僅供有興趣的讀者參考)

我們檢視官方bug修復的commit就發現,這個bug其實只改了一行程式碼。驚不驚喜,意不意外?哈哈哈……

翻了一下程式碼,這個位置主要是條件下推這個類的一個成員函式,用於解析結果。

修改後的程式碼加了字符集處理。

來自 “ DBA札記 ”, 原文作者:小董學程式設計;原文連結:https://mp.weixin.qq.com/s/2MFVWDul8f75J-QhZxhQZA,如有侵權,請聯絡管理員刪除。

相關文章