Функция MySQL FIND_IN_SET со специальным символом не работает - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть хранимая процедура:

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_ *.

Значение ~! @ # $% ^ & * () _ + |} {":?> <./'';[]\=- `- это тэг в базе данных. </p>

enter image description here

А это данные в базе данных:

enter image description here

И версия MySQL:

SELECT VERSION();

10.3.9-MariaDB

1 Ответ

0 голосов
/ 12 марта 2019

Наконец я обнаружил проблему, потому что я установил этот режим.

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

возвращает строку с тэгом = ~! @ # $% ^ & * () _ + |} {":?> <./ '; [] \ = -` </p>

так что функция FIND_IN_SET соответствует правильным значениям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...