翼度科技»论坛 编程开发 mysql 查看内容

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

3

主题

3

帖子

9

积分

新手上路

Rank: 1

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

此BUG已在 GreatSQL 8.0.32-25 版本中解决
MySQL 8.0.26版本升级32版本查询数据为空的跟踪
接到客户反馈的问题后,对问题进行了复现和分析。
版本信息
  1. greatsql> select version();
  2. +-----------+
  3. | version() |
  4. +-----------+
  5. | 8.0.32-24 |
  6. +-----------+
  7. 1 row in set (0.00 sec)
复制代码
建表语句
  1. greatsql> show create table t_student;
  2. CREATE TABLE `t_student1` (
  3.   `id` int NOT NULL AUTO_INCREMENT,
  4.   `name` varchar(255) NOT NULL,
  5.   `age` int NOT NULL,
  6.   PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
复制代码
表数据
  1. greatsql> select * from t_student;
  2. +----+--------+-----+
  3. | id | name   | age |
  4. +----+--------+-----+
  5. |  1 | abc    |  10 |
  6. |  2 | 汤姆   |  20 |
  7. +----+--------+-----+
  8. 2 rows in set (0.08 sec)
复制代码
查询数据
  1. greatsql>  select * from (select * from t_student union select * from t_student) temp where name='汤姆';
  2. Empty set, 2 warnings (0.00 sec)
  3. greatsql> show warnings;
  4. +---------+------+-------------------------------------------------------------------------+
  5. | Level   | Code | Message                                                                 |
  6. +---------+------+-------------------------------------------------------------------------+
  7. | Warning | 1300 | Cannot convert string '\xE6\xB1\xA4\xE5\xA7\x86' from utf8mb4 to binary |
  8. | Warning | 1300 | Cannot convert string '\xE6\xB1\xA4\xE5\xA7\x86' from utf8mb4 to binary |
  9. +---------+------+-------------------------------------------------------------------------+
  10. 2 rows in set (0.00 sec)
  11. greatsql> select * from (select * from t_student union select * from t_student) temp;
  12. +----+--------+-----+
  13. | id | name   | age |
  14. +----+--------+-----+
  15. |  1 | abc    |  10 |
  16. |  2 | 汤姆   |  20 |
  17. +----+--------+-----+
  18. 2 rows in set (0.00 sec)
  19. greatsql> select * from (select * from t_student union select * from t_student) temp where name='abc';
  20. +----+------+-----+
  21. | id | name | age |
  22. +----+------+-----+
  23. |  1 | abc  |  10 |
  24. +----+------+-----+
  25. 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语句能正常执行
  1. greatsql> set optimizer_switch='derived_condition_pushdown=off';
  2. Query OK, 0 rows affected (0.00 sec)
  3. greatsql> select * from (select * from t_student union select * from t_student) temp where name='汤姆';
  4. +----+--------+-----+
  5. | id | name   | age |
  6. +----+--------+-----+
  7. |  2 | 汤姆   |  20 |
  8. +----+--------+-----+
  9. 1 row in set (0.00 sec)
复制代码
方法二:
对单个SQL语句设置NO_DERIVED_CONDITION_PUSHDOWN hint
  1. greatsql> set optimizer_switch='derived_condition_pushdown=on';
  2. Query OK, 0 rows affected (0.00 sec)
  3. greatsql> select * from (select * from t_student union select * from t_student) temp where name='汤姆';
  4. Empty set, 2 warnings (0.00 sec)
  5. greatsql> select  /*+ NO_DERIVED_CONDITION_PUSHDOWN(temp) */ * from (select * from t_student union select * from t_student) temp where name='汤姆';
  6. +----+--------+-----+
  7. | id | name   | age |
  8. +----+--------+-----+
  9. |  2 | 汤姆   |  20 |
  10. +----+--------+-----+
  11. 1 row in set (0.00 sec)
复制代码
Enjoy GreatSQL
来源:https://www.cnblogs.com/greatsql/p/18065420
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具