sourcetip

MySQL FIND_특수 문자가 포함된 IN_SET 함수가 작동하지 않습니다.

fileupload 2023. 7. 27. 22:13
반응형

MySQL 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_한글')올바른 태그를 반환합니다.call sp_chart_band_tag_quicktrend('YH05_한글,~!@#$%^&*()_+|}{":?><./'';[]\\=-')`

그러나 YH05_글한 태그만 반환합니다.

값 ~!@#$%^&*()_+|}{":?></>;[]\=-'는 데이터베이스에 있는 태그 이름입니다.

enter image description here

데이터베이스의 데이터는 다음과 같습니다.

enter image description here

버전 MySQL:

SELECT VERSION();

10.3.9-마리아DB

결국 이 모드를 설정했기 때문에 문제를 발견했습니다.

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 = '~!@#$%^&*()_+|}{":?><./'';[]\\=-`'

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

FIND_가 되도록IN_SET 함수가 올바른 값과 일치합니다.

언급URL : https://stackoverflow.com/questions/54759903/mysql-find-in-set-function-with-special-character-not-working

반응형