Skip to content
Advertisement

MySQL showing strange result

I have a table called tabela1512823699024883 that looks like this: enter image description here

On which I run query like this:

SELECT * FROM tabela1512823699024883 WHERE `age` = 'male'

This query does not make sense, because age column is int type and I’m looking for string value in my query, but MySQL still returns no empty rows whatsoever. Here is what query returned: enter image description here So age row does not contains male value in neither rows returned. How can this be possible?

Advertisement

Answer

Same issue will occur with casting a string to an integer type.

SELECT CAST('male' as SIGNED); #0
#or
SELECT CAST('male' as UNSIGNED); #0

However if a number is supplied within the string.

SELECT CAST('1234male' as UNSIGNED); #1234
#and
SELECT CAST('male1234' as UNSIGNED); #0

To resolve the issue use BINARY on the column, which will also cause the textual value to become case-sensitive.

SELECT * FROM tabela1512823699024883 WHERE BINARY `age` = 'male';

Alternatively to utilize a case-insensitive BINARY criteria CONVERT() the value to the desired character-set and then specify a case-inventive collation. [sic]

SELECT * FROM tabela1512823699024883 WHERE CONVERT(BINARY `age` USING utf8) COLLATE utf8_general_ci = 'male';
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement