String-zu-Null-Vergleich in MySQL: Die Wahrheit ans Licht
Beim Vergleich von String-Spalten mit Null in MySQL zeigt sich ein überraschendes Verhalten: die Das Ergebnis wird als wahr ausgewertet. Dies tritt in folgenden Szenarien auf:
select 'string' = 0 as res; -- res = 1 (true)
Der Vergleich derselben Zeichenfolge mit anderen Zahlen, sowohl positiven als auch negativen, führt jedoch zum erwarteten falschen Ergebnis. Diese Inkonsistenz wirft die Frage auf: Warum tritt diese Anomalie auf?
Hinter der String-Magie
MySQL wandelt Strings bei Vergleichen stillschweigend in Zahlen um. Bei Zeichenfolgen, die nicht mit einer Zahl beginnen, ergibt die Konvertierung Null. Dies erklärt, warum:
select 'string' = 0 as res; -- res = 1 (true)
Konvertierung steuern
Während MySQL Konvertierungen häufig automatisch durchführt, kann es nützlich sein, sie mithilfe von Operatoren wie „“ zu erzwingen. Bedenken Sie Folgendes:
select '0string' + 0 = 'string' AS res; -- res = 1 (true)
In dieser Abfrage wird die Zeichenfolge „0string“ zu Null addiert, was zu ihrer Konvertierung in eine Zahl führt. Anschließend wird die konvertierte Zeichenfolge „string“ mit Null verglichen, was erneut eine Konvertierung auslöst. Der resultierende Vergleich erfolgt zwischen numerischen Werten und ergibt „true“.
Die automatischen Zeichenfolgenkonvertierungen von MySQL gehen über Vergleiche hinaus. Zum Beispiel:
select '1abc' + '2ef' AS total; -- total = 1+2 = 3
Strings werden vor der Addition in Zahlen umgewandelt, was zu korrekten numerischen Operationen führt.
Das Verständnis dieses String-Konvertierungsmechanismus hilft, das scheinbar paradoxe Verhalten bei MySQL-String-Vergleichen zu entmystifizieren. Es ermöglicht Entwicklern, diese Funktion beim Schreiben von Abfragen und bei der Datenbearbeitung effektiv zu nutzen.
Das obige ist der detaillierte Inhalt vonWarum behandelt MySQL String-Vergleiche mit Null als wahr?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!