MySQLは自動的に文字列を数値にキャストします:
SELECT '1string' = 0 AS res; -- res = 0 (false)
SELECT '1string' = 1 AS res; -- res = 1 (true)
SELECT '0string' = 0 AS res; -- res = 1 (true)
数字で始まらない文字列は0と評価されます:
SELECT 'string' = 0 AS res; -- res = 1 (true)
もちろん、ある文字列を別の文字列と比較しようとしても、変換は行われません:
SELECT '0string' = 'string' AS res; -- res = 0 (false)
ただし、たとえば+演算子を使用して変換を強制することができます:
SELECT '0string' + 0 = 'string' AS res; -- res = 1 (true)
文字列'0string'と数値0を合計しているため、最後のクエリはTRUEを返します。したがって、文字列は数値に変換する必要があり、SELECT 0 + 0 = 'string'
になります。 次に、文字列'string'は、0と比較される前に数値に変換され、SELECT 0 = 0
になります。 これはTRUEです。
これも機能します:
SELECT '1abc' + '2ef' AS total; -- total = 1+2 = 3
数値に変換された文字列の合計(この場合は1 + 2)を返します。