Macken beim numerischen Vergleich: MySQLs überraschende Auswertung von „Zeichenfolge“ zu 0
In MySQL tritt beim Vergleich einer „Zeichenfolge“ mit ein unerwartetes Verhalten auf 0. Während logisches Denken auf ein falsches Ergebnis schließen lässt, ergibt es überraschenderweise ein wahres Ergebnis. Diese Anomalie ist darauf zurückzuführen, dass MySQL bei Vergleichen automatisch Zeichenfolgen in Zahlen umwandelt.
Wenn eine Zeichenfolge mit einem numerischen Zeichen beginnt, konvertiert MySQL sie in einen numerischen Wert. Zeichenfolgen ohne numerische Präfixe werden jedoch als Nullen behandelt. Somit wird „string“ in 0 umgewandelt, was zu einem echten Vergleich mit 0 führt.
Dieses Verhalten ist in dem Beispiel deutlich, in dem eine String-Spalte mit 0 verglichen wird:
select 'string' = 0 as res; -- res = 1 (true)
In Im Gegensatz dazu geben Vergleiche mit anderen Zahlen, sowohl Ganzzahlen als auch Dezimalzahlen, erwartungsgemäß „false“ zurück:
select 'string' = -12 as res; -- res = 0 (false) select 'string' = 3131.7 as res; -- res = 0 (false)
Beim Vergleich der Zeichenfolge mit „0“ als string, das Ergebnis ist falsch:
select 'string' = '0' as res; -- res = 0 (false)
Um eine Konvertierung zu erzwingen, können Operatoren wie „ “ verwendet werden:
select '0string' + 0 = 'string' AS res; -- res = 1 (true)
Diese Abfrage stellt sicher, dass „0string“ in eine Zahl umgewandelt wird vor der Summierung. Anschließend wird auch „string“ in eine Zahl umgewandelt, was zu einem numerischen Vergleich führt.
Das Verständnis dieses Casting-Verhaltens ist entscheidend, um unerwartete Ergebnisse bei MySQL-Abfragen zu vermeiden. Durch die Nutzung von Operatoren, die Zeichenfolgen explizit in Zahlen umwandeln, können Entwickler genaue Vergleiche sicherstellen und potenzielle Missverständnisse vermeiden.
Das obige ist der detaillierte Inhalt vonWarum behandelt MySQL \'string\' in numerischen Vergleichen als 0?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!