SQL Like vs. = Функция по-другому без подстановочных знаков - PullRequest
1 голос
/ 03 февраля 2020

У меня есть запрос, в котором изменение с like на = приводит к совпадению. Насколько я понимаю, = и like работали одинаково, если не были подстановочные знаки. Ни _, ни % нет в моей строке. В моей строке присутствуют следующие символы:

acdeijknoprtuy4@-.

Мой запрос был:

SELECT * FROM UserEmails WHERE email like ?

, который дал 0 результатов, я изменил его на:

SELECT * FROM UserEmails WHERE email = ?

и я получил 1 ожидаемый результат. Это работает на Percona версии mysql 5.6.41.

1 Ответ

1 голос
/ 03 февраля 2020

Ваша строка или соответствующее значение базы данных, скорее всего, имеют завершающие пробелы.

См. Документацию для MySQL 5.6 :

Все MySQL сортировки имеют тип PAD SPACE. Это означает, что все значения CHAR, VARCHAR и TEXT сравниваются без учета конечных пробелов. «Сравнение» в этом контексте не включает в себя оператор сопоставления с шаблоном LIKE, для которого важны конечные пробелы.

In MySQL 8.0 :

Большинство MySQL сопоставлений имеют атрибут pad PAD SPACE. Исключением являются сопоставления Unicode, основанные на UCA 9.0.0 и выше, которые имеют атрибут pad NO PAD.

...