3

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.

2 Answers 2

4

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.

Sign up to request clarification or add additional context in comments.

3 Comments

Dear lord :-). Can this be disabled or should I explicitly say do not convert somehow?
@PrimozRome: It seems that it is not possible to suppress this behaviour.
This is horrendous behavior. Is it still the case that this can't be turned off and made more strict?
1

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.