现象
MySQL 8.0.32 下使用含中文的字段作为模糊过滤条件,查找不到数据。样例SQL如下:
select * from (
select *
from test_1
union
select *
from test_1
) temp
where name like '%姜志福%'
测试数据:

临时解决方案
使用hints关闭派生条件下推:
select /*+ NO_DERIVED_CONDITION_PUSHDOWN(temp) */ * from (
select *
from test_1
union
select *
from test_1
) temp
where name like '%姜志福%'
参考链接
https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html
在MySQL8.0.32版本中,当使用含中文的字段进行模糊过滤时,可能出现无法找到数据的问题。文章提供了一个示例SQL查询,展示了在联合查询中name字段like%姜志福%无法匹配到结果的状况。为了解决这个问题,文章提出了一个临时解决方案,即通过添加optimizerhintNO_DERIVED_CONDITION_PUSHDOWN(temp)来关闭派生条件下的下推优化,从而使得查询能正确返回含中文的匹配记录。
1638

被折叠的 条评论
为什么被折叠?



