У меня есть база данных MySQL, в которой есть поле TagName со значением ~!@#$%^&*()_+|}{":?>‹./';[]\=-` Я пытаюсь выполнить запрос select TagName из taginfo, где TagName как '%@#$%';
Он показывает данные с тэгом, содержащим символ кавычки. Но я запрашиваю с оператором = и подобным оператором и добавляю больше кавычек '', чтобы принять одинарную кавычку, но он показывает пустой результат.
Я также пытаюсь добавить COLLATE UTF8_GENERAL_CI или изменить CHARACTER SET, но все безуспешно.
SELECT * from taginfo where tagname like '%~!@#$%^&*()_+|}{":?><./'';[]\=-`%';
SELECT * from taginfo where tagname like '%~!@#$%^&*()_+|}{":?><./'';[]\=-`%' COLLATE UTF8_GENERAL_CI;
SELECT * from taginfo where tagname COLLATE UTF8_GENERAL_CI like '%~!@#$%^&*()_+|}{":?><./'';[]\=-`%';
ALTER TABLE mytable CONVERT TO CHARACTER SET UTF8_GENERAL_CI
Error 2/19/2019 10:03:24 AM 0:00:00.039 <link> - MySQL Database Error: Unknown character set: 'UTF8_GENERAL_CI' 5 0
Версия сервера БД: MySQL 5.5.5 Информация о таблице MariaDB:
Вот результат запроса без одинарной кавычки:
Обновлено: я обнаружил проблему, заключающуюся в том, что если я запрашиваю без символа \, он показывает результат:
select TagName from taginfo where TagName like '%~!@#$%^&*()_+|}{":?><./'';[]%';
Но я добавил символ \ в конце он ничего не показывает:
select TagName from taginfo where TagName like '%~!@#$%^&*()_+|}{":?><./'';[]\%';
добавить больше всплеска все еще не работает
select TagName from taginfo where TagName like '%~!@#$%^&*()_+|}{":?><./'';[]\\%';
Обновлено: теперь проблема в том, что аналогичный запрос возвращает результат, но = запрос не возвращает ничего.
SELECT * from taginfo where tagname like '%~!@#$%^&*()_+|}{":?><./'';[]\\=-`%';
select * from taginfo where TagName = '~!@#$%^&*()_+|}{":?><./'';[]\\=-`'
Обновлено: когда я пытаюсь создать БД в MySQL 8.0.13, этот запрос работает хорошо и возвращает 1 строку.
select * from taginfo1 where TagName = '~!@#$%^&*()_+|}{":?><./'';[]\\=-`';
Но в 10.3.9-MariaDB запрос
select * from taginfo1 where TagName = '~!@#$%^&*()_+|}{":?><./'';[]\\=-`';
не может вернуть никакого результата.
SELECT VERSION();
10.3.9-MariaDB
;
- person danblack   schedule 19.02.2019SELECT * from taginfo where tagname like '%~!@#$%^&*()_+|}{":?><./'';[]\\=-`%';
неверен. Вы должны экранировать % и _, иначе эти символы будут «совпадать» с чем-то, чего вы, возможно, не ожидаете. - person fifonik   schedule 19.02.2019COLLATION
изменит результаты для этой строки.COLLATION
в основном применяется для сравнения букв, особенно букв с ударением. - person Rick James   schedule 19.02.2019