Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySQL automatic string to integer casting in where clause?

Tags:

sql

mysql

I am not new to MySQL but a strange situation happened in my code today coincidently which got me surprised. Can someone explain why this gives me identical results?

SELECT * FROM `products` WHERE id = 12

and

SELECT * FROM `products` WHERE id = '12ABC'

In both cases I get the same result with the same record being selected. I would expect that second one would return me nothing?! My ID field is int(11) unsigned with auto_increment flag turned on.

like image 673
Primoz Rome Avatar asked May 12 '26 11:05

Primoz Rome


2 Answers

From MySQL docs:

When an operator is used with operands of different types, type conversion occurs to make the operands compatible

Documentation

So basically, '12ABC' is cast to 12.

like image 160
potashin Avatar answered May 14 '26 09:05

potashin


MySQL has to make a conversion to make a compare betwen 2 different types. It tries to make the string to an int and get the digits from the string starting from the beginning.

It you had for instance

'ABC12'

the result of the string conversion to int would be 0

like image 29
juergen d Avatar answered May 14 '26 10:05

juergen d



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!