I recently just fixed a bug in some of my code and was hoping someone could explain to me why the bug occurred.
I had a query like this:
SELECT * FROM my_table WHERE my_field=13
Unexpectedly, this was returning rows where my_field was equal to either 13 or 13a. The fix was simple, I changed the query to:
SELECT * FROM my_table WHERE my_field='13'
My question is, is this supposed to be the case? I’ve always thought that to return a similar field, you would use something like:
SELECT * FROM my_table WHERE my_field LIKE '13%'
What is the difference between LIKE + a Wild Card vs an equals operator with no quotes?
This statement returns rows for
my_field = '13a':Because MySQL performs type conversion from string to number during the comparison, turning
'13a'to13. More on that in this documentation page.Adding quotes turns the integer to a string, so MySQL only performs string comparison. Obviously,
'13'cannot be equal to'13a'.The
LIKEclause always performs string comparison (unless either one of the operands isNULL, in which case the result isNULL).