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 函数匹配正确的值
我有一个存储过程:
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';
select * from taginfo where tagname = '~!@#$%^&*()_+|}{":?><./'';[]\=-`'
它 return 带有标记名的行 = ~!@#$%^&*()_+|}{":?><./';[]\=-`
以便 FIND_IN_SET 函数匹配正确的值