MySQL automatycznie rzuca ciąg na liczbę:
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 ciąg, który nie zaczyna się od liczby, jest oceniany jako 0:
SELECT 'string' = 0 AS res; -- res = 1 (true)
Oczywiście, gdy próbujemy porównać ciąg z innym ciągiem, nie ma konwersji:
SELECT '0string' = 'string' AS res; -- res = 0 (false)
ale możemy wymusić konwersję za pomocą np. operatora +:
SELECT '0string' + 0 = 'string' AS res; -- res = 1 (true)
ostatnie zapytanie zwraca TRUE, ponieważ sumujemy ciąg „0ciąg” z liczbą 0, więc ciąg musi zostać przekonwertowany na liczbę, staje się on SELECT 0 + 0 = 'string'
a następnie ponownie ciąg 'string' jest konwertowany na liczbę przed porównaniem z 0, a następnie staje się SELECT 0 = 0
co jest PRAWDĄ.
To również zadziała:
SELECT '1abc' + '2ef' AS total; -- total = 1+2 = 3
i zwróci sumę ciągów przekonwertowanych na liczby (1 + 2 w tym przypadku).