1

我有一个存储过程:

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

4

1 回答 1

1

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

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

此等号 (=) 查询返回空

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

当我删除 NO_BACKSLASH_ESCAPES 时SET @@SQL_MODE = 'NO_ENGINE_SUBSTITUTION';

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

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

以便 FIND_IN_SET 函数匹配正确的值

于 2019-03-12T06:38:22.737 回答