MySQL使用变量作为通配符字符串导致查询失效问题咨询
问题原因分析
你当前的问题出在concat函数里额外添加了双引号。硬编码的like "%grow%"实际是匹配包含grow的字符串,而concat('"%', @search, '%"')生成的结果是"%grow%"——这里的双引号会被当作匹配的一部分,数据库会去查找包含"grow"(带双引号)的字段值,自然查不到预期结果。
解决方案
以下是几种可行的解决方式:
直接拼接通配符,去掉多余的双引号:
set @search = "grow"; select * from answer a where a.answer like concat('%', @search, '%');提前在变量中包含通配符,直接使用变量:
set @search = "%grow%"; select * from answer a where a.answer like @search;若需要更灵活的动态查询,可使用预处理语句:
set @search = "grow"; set @sql = concat('select * from answer a where a.answer like "%', @search, '%"'); prepare stmt from @sql; execute stmt; deallocate prepare stmt;
内容的提问来源于stack exchange,提问作者ronline
相关产品推荐
相关产品推荐

