首页 > 数据库 >MySQL 8.0.26版本升级32版本查询数据为空的跟踪

MySQL 8.0.26版本升级32版本查询数据为空的跟踪

时间:2024-03-11 10:00:37浏览次数:38  
标签:8.0 26 set greatsql 版本升级 student +----+--------+-----+ select

某业务系统将MySQL 8.0.26升级为GreatSQL 8.0.32-24 后,某些特定的SQL语句不能查询到数据。经测试 MySQL 8.0.32也存在相同的问题

file

此BUG已在 GreatSQL 8.0.32-25 版本中解决

MySQL 8.0.26版本升级32版本查询数据为空的跟踪

接到客户反馈的问题后,对问题进行了复现和分析。

版本信息

greatsql> select version();
+-----------+
| version() |
+-----------+
| 8.0.32-24 |
+-----------+
1 row in set (0.00 sec)

建表语句

greatsql> show create table t_student;
CREATE TABLE `t_student1` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

表数据

greatsql> select * from t_student;
+----+--------+-----+
| id | name   | age |
+----+--------+-----+
|  1 | abc    |  10 |
|  2 | 汤姆   |  20 |
+----+--------+-----+
2 rows in set (0.08 sec)

查询数据

greatsql>  select * from (select * from t_student union select * from t_student) temp where name='汤姆';
Empty set, 2 warnings (0.00 sec)

greatsql> show warnings;
+---------+------+-------------------------------------------------------------------------+
| Level   | Code | Message                                                                 |
+---------+------+-------------------------------------------------------------------------+
| Warning | 1300 | Cannot convert string '\xE6\xB1\xA4\xE5\xA7\x86' from utf8mb4 to binary |
| Warning | 1300 | Cannot convert string '\xE6\xB1\xA4\xE5\xA7\x86' from utf8mb4 to binary |
+---------+------+-------------------------------------------------------------------------+
2 rows in set (0.00 sec)

greatsql> select * from (select * from t_student union select * from t_student) temp;
+----+--------+-----+
| id | name   | age |
+----+--------+-----+
|  1 | abc    |  10 |
|  2 | 汤姆   |  20 |
+----+--------+-----+
2 rows in set (0.00 sec)

greatsql> select * from (select * from t_student union select * from t_student) temp where name='abc';
+----+------+-----+
| id | name | age |
+----+------+-----+
|  1 | abc  |  10 |
+----+------+-----+
1 row in set (0.00 sec)

可以看到 直接查询temp这个view或者 在视图上添加英文过滤条件均能查询出数据,在view上添加中文过滤条件sql语句返回结果为空,有warnings提醒,warnings具体内容为Cannot convert string

在官方网站进行搜索,以下连接有相似内容:

https://bugs.mysql.com/bug.php?id=110228

https://bugs.mysql.com/bug.php?id=110955

MySQL 8.0.32版本中对于UNION/UNION ALL 后的结果中的字符串字段过滤筛选不生效,客户端中提示:

Cannot convert string '%\x...' from utf8mb4 to binary

官方已确认是8.0.32中的一个bug,已在8.0.33版本中修复,对于8.0.32版本,官方给出的解决方式如下:

set optimizer_switch="derived_condition_pushdown=off";

让所有Session都生效,需要在配置文件中将optimizer_switch设置为off

此BUG已在 GreatSQL 8.0.32-25 版本中解决

解决方法

方法一:

设置set optimizer_switch="derived_condition_pushdown=off";后SQL语句能正常执行

greatsql> set optimizer_switch='derived_condition_pushdown=off';
Query OK, 0 rows affected (0.00 sec)

greatsql> select * from (select * from t_student union select * from t_student) temp where name='汤姆';
+----+--------+-----+
| id | name   | age |
+----+--------+-----+
|  2 | 汤姆   |  20 |
+----+--------+-----+
1 row in set (0.00 sec)

方法二:

对单个SQL语句设置NO_DERIVED_CONDITION_PUSHDOWN hint

greatsql> set optimizer_switch='derived_condition_pushdown=on';
Query OK, 0 rows affected (0.00 sec)

greatsql> select * from (select * from t_student union select * from t_student) temp where name='汤姆';
Empty set, 2 warnings (0.00 sec)

greatsql> select  /*+ NO_DERIVED_CONDITION_PUSHDOWN(temp) */ * from (select * from t_student union select * from t_student) temp where name='汤姆';
+----+--------+-----+
| id | name   | age |
+----+--------+-----+
|  2 | 汤姆   |  20 |
+----+--------+-----+
1 row in set (0.00 sec)

Enjoy GreatSQL

标签:8.0,26,set,greatsql,版本升级,student,+----+--------+-----+,select
From: https://www.cnblogs.com/greatsql/p/18065420

相关文章

  • Logstash系列---【centos7离线安装logstash7.8.0】
    1.安装包下载地址一般根据es的版本来确定logstash的版本,一般保持一致即可。Logstash和es版本对应关系:https://www.elastic.co/cn/support/matrix#matrix_compatibility。Logstash下载地址:https://www.elastic.co/cn/downloads/past-releases/logstash-7-8-02.解压并复制配置......
  • Mysql8.0在windows系统安装一直卡在Starting the server的解决方案
    报错:Beginningconfigurationstep:StartingServerAttemptingtostartserviceMySQL80一直卡在这里,手动启动服务也起不起来情况一:到这里直接显示叉情况二:一直停留在StartingServer可以参考下述步骤进行操作:1、使用Win+R-->运行“services.msc”-->打开服务管理......
  • jdk8.0卸载
     1. Java-version2. 计算机应用程序卸载 3. 删除变量将配置的系统变量的JAVA_HOME与Path内的环境删除。  4.删除找到,C:\ProgramFiles或者C:\ProgramFiles(x86)或者C:\ProgramData中找到Oracle和sun文件夹删除。 ......
  • H265 NALU类型详细解析
    1.H265NALU类型解析F:禁止位,必须为0,表示有效;为1的话表示无效。Type:6-bitsNALType确定NAL的类型,其中VCLNAL和non-VCLNAL各有32类。0-31是vclnal单元;32-63,是非vclnal单元。VCL是指携带编码数据的数据流,而non-VCL则是控制数据流。vclnal单元的类型(0-31)如下表: no......
  • 解密prompt系列26. 人类思考vs模型思考:抽象和发散思维
    在ChainofThought出来后,出现过许多的优化方案例如Treeofthought,GraphofThought,AlgorithmofThought等等,不过这些优化的出发点都更加"MachineLike",而非"HumanLike",哈哈不是说机器化不好,仅仅是对AGI的一些个人偏好而已。所以如果我们从人类思考的角度出发,能否把当......
  • UnrealSharp: 一个可以让你在UnrealEngine5中采用C# 12和.NET 8.0开发的插件
    写着玩的,就当学习Unreal练手的玩意儿了。主要特性:支持.NET6.0~.NET8.0[默认为.NET8.0],支持C#12支持在C#中创建新的Unreal类、Unreal结构、Unreal枚举等支持为C#类创建新的Unreal属性、Unreal函数和Unreal多播委托。支持C#类继承UnrealC++类,这意味着您可以......
  • CF1264D2 Beautiful Bracket Sequence (hard version) 题解
    括号深度的本质,其实就是删除若干个字符以后使得左边一半全是(,右边一半全是),最终(的个数的最大值。那么就一定存在一个位置使得在这个位置以及之前的字符中(的个数等于这个字符后)的个数。考虑枚举这个位置,记它左边的(的个数为\(a\)、?的个数为\(x\),右边的)的个数......
  • ubuntu c语言 opencv实现h265 编码
    在Ubuntu上使用C语言和OpenCV实现H.265编码,你可以遵循以下步骤:安装依赖:首先确保你的系统已经安装了Ubuntu最新版本,并更新所有包列表。安装FFmpeg,因为OpenCV使用FFmpeg来处理视频编码。可以使用以下命令安装:复制sudoaptupdatesudoaptinstallffmpeg安装OpenCV:OpenCV库本......
  • Java蓝桥杯题目——1264排个序
    题目 思路:1、输入数据2、用冒泡排序将数组(下标为pj的)部分升序,3、判断是否有前一个元素大于后一个元素(降序),有则返回false注意:(1)数组p元素的取值不能大于数组a的长度,因为p元素是a的下标(2)数组下标越界问题,使用i<a.length判断(3)并非所有元素都要降序才返回false,只要有前一个元......
  • 代码随想录 第十五天 | ● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树 2 感
    leetcode:102.二叉树的层序遍历-力扣(LeetCode)思路:用队列长度控制弹栈的多少,不等于空时获取root,因为传了一个根肯定是1,接下来找左右节点,将根节点弹出,获取下一次的size,一直到空。。。//102.二叉树的层序遍历classSolution{publicList<List<Integer>>resList=newA......