MySQL wandelt einen String automatisch in eine Zahl um:
SELECT '1string' = 0 AS res; -- res = 0 (false)
SELECT '1string' = 1 AS res; -- res = 1 (true)
SELECT '0string' = 0 AS res; -- res = 1 (true)
und ein String, der nicht mit einer Zahl beginnt, wird als 0:
ausgewertetSELECT 'string' = 0 AS res; -- res = 1 (true)
Wenn wir versuchen, einen String mit einem anderen String zu vergleichen, gibt es natürlich keine Konvertierung:
SELECT '0string' = 'string' AS res; -- res = 0 (false)
aber wir können eine Konvertierung erzwingen, indem wir zum Beispiel einen +-Operator verwenden:
SELECT '0string' + 0 = 'string' AS res; -- res = 1 (true)
Die letzte Abfrage gibt TRUE zurück, weil wir einen String '0string' mit einer Zahl 0 summieren, also muss der String in eine Zahl umgewandelt werden, er wird zu SELECT 0 + 0 = 'string'
und dann wird die Zeichenfolge 'string' wieder in eine Zahl umgewandelt, bevor sie mit 0 verglichen wird, und wird dann zu SELECT 0 = 0
was WAHR ist.
Das funktioniert auch:
SELECT '1abc' + '2ef' AS total; -- total = 1+2 = 3
und gibt die Summe der in Zahlen umgewandelten Strings zurück (in diesem Fall 1 + 2).