Heim > Datenbank > MySQL-Tutorial > Warum behandelt MySQL \'string\' in numerischen Vergleichen als 0?

Warum behandelt MySQL \'string\' in numerischen Vergleichen als 0?

DDD
Freigeben: 2024-12-10 16:10:11
Original
216 Leute haben es durchsucht

Why Does MySQL Treat 'string' as 0 in Numeric Comparisons?

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

Beim Vergleich der Zeichenfolge mit „0“ als string, das Ergebnis ist falsch:

select 'string' = '0' as res; -- res = 0 (false)
Nach dem Login kopieren

Um eine Konvertierung zu erzwingen, können Operatoren wie „ “ verwendet werden:

select '0string' + 0 = 'string' AS res; -- res = 1 (true)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage