A clarification. If a string value begins with a digit, MySQL does not convert it to zero (FALSE), but rather to an integer made up of the leading digits in the value (until a non-digit is reached). This can be shown by using the CAST() function.

mysql> SELECT '21b' = 0, CAST('21b' AS SIGNED);
+-----------+-----------------------+
| '21b' = 0 | CAST('21b' AS SIGNED) |
+-----------+-----------------------+
|         0 |                    21 |
+-----------+-----------------------+
1 row in set (0.00 sec)

However, if the string value begins with a non-digit, then it is coerced or cast to zero:

mysql> SELECT 'b21' = 0, CAST('b21' AS SIGNED);
+-----------+-----------------------+
| 'b21' = 0 | CAST('b21' AS SIGNED) |
+-----------+-----------------------+
|         1 |                     0 |
+-----------+-----------------------+
1 row in set (0.00 sec)

It is still true that Przemyslaw was assuming that a non-empty string would always evaluate as TRUE, and this isn't necessarily the case. So the best strategy is to compare directly with the empty string, as already discussed.

Thanks to Paul DuBois for reminding me of this. My apologies to anyone whom I might have misled.

--
Jon Stephens, Technical Writer
MySQL AB   www.mysql.com
Office: +61 (07) 3388 2228
Are you MySQL certified?  www.mysql.com/certification

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]



Reply via email to