Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql:Warum ergibt der Vergleich einer 'Zeichenfolge' mit 0 wahr?

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:

ausgewertet
SELECT '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).