MySQL automaticky přetypuje řetězec na číslo:
SELECT '1string' = 0 AS res; -- res = 0 (false)
SELECT '1string' = 1 AS res; -- res = 1 (true)
SELECT '0string' = 0 AS res; -- res = 1 (true)
a řetězec, který nezačíná číslem, je vyhodnocen jako 0:
SELECT 'string' = 0 AS res; -- res = 1 (true)
Samozřejmě, když se pokoušíme porovnat řetězec s jiným řetězcem, nedochází k žádné konverzi:
SELECT '0string' = 'string' AS res; -- res = 0 (false)
ale převod můžeme vynutit například pomocí operátoru +:
SELECT '0string' + 0 = 'string' AS res; -- res = 1 (true)
poslední dotaz vrací TRUE, protože sčítáme řetězec '0string' s číslem 0, takže řetězec musí být převeden na číslo, stane se SELECT 0 + 0 = 'string'
a pak znovu je řetězec 'řetězec' převeden na číslo, než je porovnán s 0, a poté se změní na SELECT 0 = 0
což je PRAVDA.
Toto bude také fungovat:
SELECT '1abc' + '2ef' AS total; -- total = 1+2 = 3
a vrátí součet řetězců převedených na čísla (v tomto případě 1 + 2).