Are there any differences in the results of these two queries other than performance?
SELECT * FROM pet WHERE name LIKE 'Spot';
SELECT * FROM pet WHERE name = 'Spot';
Reason I ask is the real script will be something like the following and the API user is responsible to come up with the pattern. More often that not, a LIKE pattern will be provided, but there is always a chance that just a string will be provided resulting in SELECT * FROM pet WHERE name LIKE "Spot"
.
$stmt = $this->pdo->prepare('SELECT * FROM pet WHERE name LIKE ?');
$stmt->execute([$_GET['name']]); //Spot
return [$stmt->fetchAll(),200];
In practice, LIKE
with no wildcards is functionally equivalent to =
. However, they are not the same! The obvious difference is that =
doesn't treat \
, %
, and _
in any special way, but LIKE
does.
The documentation is pretty clear on this:
Per the SQL standard,
LIKE
performs matching on a per-character basis, thus it can produce results different from the = comparison operator:
In addition to collation differences, trailing spaces matter:
In particular, trailing spaces are significant, which is not true for
CHAR
orVARCHAR
comparisons performed with the = operator:
In practice, the strings being compared usually have the same collation, don't have trailing spaces, and special characters are ignored, so LIKE
is sometimes used as a replacement for =
(especially because LIKE
without wildcards at the beginning of the pattern can also make use of an index).
Effectively, it turns out to be the same thing in your example, but here is more info:
From another stackoverflow answer
= is a comparison operator that operates on numbers and strings. When comparing strings, the comparison operator compares whole strings.
LIKE is a string operator that compares character by character.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With