MySQLs rätselhafter String-zu-0-Vergleich: entmystifiziert
Beim Durchführen von MySQL-Abfragen kann es zu einem unerwarteten Ergebnis kommen: dem Vergleich einer String-Spalte mit 0 (als Zahl) gibt unerwartet TRUE zurück. Dieses Verhalten kann kontraintuitiv erscheinen, insbesondere wenn andere numerische Vergleiche die erwarteten Ergebnisse liefern.
Wenn man sich mit den zugrunde liegenden Mechanismen von MySQL befasst, liegt die Antwort in der automatischen Konvertierungsfunktion. MySQL verfügt über die Fähigkeit, eine Zeichenfolge basierend auf bestimmten Bedingungen nahtlos in eine Zahl umzuwandeln:
Mit dieser Logik können wir das Geheimnis der Rückkehr von „string“ = 0 lüften WAHR. Da „string“ nicht mit einer Zahl beginnt, interpretiert MySQL sie als 0, was zum Vergleich SELECT 0 = 0 führt, der natürlich als TRUE ausgewertet wird.
Es ist jedoch wichtig zu beachten, dass diese Konvertierungen dies tun tritt beim direkten Vergleich von Zeichenfolgen nicht auf. Beispielsweise würde „0string“ = „string“ wie beabsichtigt FALSE ergeben.
Alternativ zwingt eine explizite Konvertierung mit einem Operator (z. B. ) MySQL dazu, die Zeichenfolge als Zahl zu behandeln. Bei Verwendung eines „ “-Operators summiert MySQL „0string“ und 0 und wandelt beide Werte in Zahlen (0 0) um, was zum erwarteten TRUE-Wert führt.
Darüber hinaus erlaubt MySQL auch das Summieren von Strings, die numerische Zeichen enthalten. Beispielsweise wird „1abc“ „2ef“ effektiv in 1 2 übersetzt und ergibt das erwartete Ergebnis von 3.
Das Verständnis dieser Mechanismen hinter den Kulissen löst das Rätsel der String-zu-0-Vergleiche von MySQL und berücksichtigt genaue Dateninterpretation und präzise Abfragekonstruktion.
Das obige ist der detaillierte Inhalt vonWarum gibt der String-Vergleich von MySQL mit 0 manchmal TRUE zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!