В приличной СУБД механизм БД распознал бы, что в строке не было подстановочных знаков, и неявно превратил ее в чистое равенство (не обязательно совпадающее с =
). Таким образом, вы получите лишь небольшой удар по производительности в начале, обычно незначительный для любого приличного размера запроса.
Однако оператор MySQL =
не обязательно действует так, как вы ожидаете (как проверка на чистоту). В частности, он по умолчанию не учитывает конечные пробелы для данных CHAR
и VARCHAR
, что означает:
SELECT age WHERE name = 'pax'
даст вам строки для 'pax'
, 'pax<one space>'
и 'pax<a hundred spaces>'
.
Если вы хотите выполнить правильную проверку на равенство, используйте ключевое слово binary
:
SELECT field WHERE name = binary 'pax'
Вы можете проверить это с помощью чего-то вроде:
mysql> create table people (name varchar(10));
mysql> insert into people value ('pax');
mysql> insert into people value ('pax ');
mysql> insert into people value ('pax ');
mysql> insert into people value ('pax ');
mysql> insert into people value ('notpax');
mysql> select count(*) from people where name like 'pax';
1
mysql> select count(*) from people where name = 'pax';
4
mysql> select count(*) from people where name = binary 'pax';
1