我有一个存储过程:
CREATE PROCEDURE MyDB.`tag_quicktrend`(
IN taglist TEXT
)
BEGIN
SELECT *
FROM taginfo
WHERE FIND_IN_SET(tagname,taglist);
END;
当我致电SP时:
call sp_chart_band_tag_quicktrend('YH05_한글')
返回正确的标签。
call sp_chart_band_tag_quicktrend('YH05_한글,~!@#$%^&*()_+|}{":?><./'';[]\\=-
')`
但它仅返回YH05_한글标签。
〜!@#$%^&*()_ + |} {“:?> <./''; [] \ =-`的值是数据库中的标记名。
这是数据库中的数据:
以及MySQL版本:
SELECT VERSION();
10.3.9-MariaDB
答案 0 :(得分:0)
最后我发现了问题,因为我设置了此模式。
SET @@SQL_MODE = CONCAT(@@SQL_MODE, ',NO_BACKSLASH_ESCAPES');
此等于(=)查询返回空
select * from taginfo where tagname = '~!@#$%^&*()_+|}{":?><./'';[]\\=-`'
当我通过SET @@SQL_MODE = 'NO_ENGINE_SUBSTITUTION';
删除NO_BACKSLASH_ESCAPES时
select * from taginfo where tagname = '~!@#$%^&*()_+|}{":?><./'';[]\\=-`'
它返回带有标签名=〜!@#$%^&*()_ + |} {“:?> <./'; [] \ =-`
的行使FIND_IN_SET函数匹配正确的值