MySQL FIND_IN_SET 具有特殊字符的函数不起作用

MySQL FIND_IN_SET function with special character not working

我有一个存储过程:

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_한글') 它 return 正确的标签。 call sp_chart_band_tag_quicktrend('YH05_한글,~!@#$%^&*()_+|}{":?><./'';[]\=-')`

但它 return 只有 YH05_한글 标签。

值 ~!@#$%^&*()_+|}{":?><./'';[]\=-` 是数据库中的标记名。

这是数据库中的数据:

和版本MySQL:

SELECT VERSION();

10.3.9-MariaDB

最后我发现了问题,因为我设置了这个模式。

SET @@SQL_MODE = CONCAT(@@SQL_MODE, ',NO_BACKSLASH_ESCAPES');

本等于(=)查询return为空

select * from taginfo where tagname = '~!@#$%^&*()_+|}{":?><./'';[]\=-`'

当我通过 SET @@SQL_MODE = 'NO_ENGINE_SUBSTITUTION';

删除 NO_BACKSLASH_ESCAPES 时
select * from taginfo where tagname = '~!@#$%^&*()_+|}{":?><./'';[]\=-`'

它 return 带有标记名的行 = ~!@#$%^&*()_+|}{":?><./';[]\=-`

以便 FIND_IN_SET 函数匹配正确的值