Abgefangen durch nachgestellte Leerzeichen: Ein SQL-Vergleichsrätsel
Betrachten Sie die folgende SQL-Abfrage, bei der wir versuchen, einen Wert in der Zonentabelle abzugleichen :
select '"' + ZoneReference + '"' as QuotedZoneReference from Zone where ZoneReference = 'WF11XU'
Zu unserer Überraschung zeigt das Ergebnis ein unerwartetes Nachlaufen Leerzeichen:
"WF11XU "
Trotz des abschließenden Leerzeichens gibt SQL Server eine Übereinstimmung zurück, was uns verwirrt.
Dieses scheinbar kontraintuitive Verhalten lässt sich erklären, indem man sich mit den Standards befasst, die die Zeichenfolgenvergleiche von SQL Server leiten . Gemäß den ANSI/ISO SQL-92-Spezifikationen füllt SQL Server die in Vergleichen verwendeten Zeichenfolgen auf, um sicherzustellen, dass sie die gleiche Länge haben, bevor die Prüfung durchgeführt wird. Diese Regel erstreckt sich auf die meisten Vergleichsoperationen und macht Zeichenfolgen wie „abc“ und „abc“ für Zeichenfolgenvergleiche gleichwertig.
Die Ausnahme von dieser Regel ist jedoch das LIKE-Prädikat. Nur wenn der LIKE-Operator beteiligt ist, verzichtet SQL Server auf das Auffüllen. Diese Unterscheidung ergibt sich aus dem primären Zweck des LIKE-Prädikats, Muster zu vergleichen, und nicht aus direkten String-Gleichheitstests.
Da wir in unserem Fall den einfachen Gleichheitsoperator (=) verwenden, wird das nachgestellte Leerzeichen von SQL Server berücksichtigt , was zu einem erfolgreichen Spiel führte. Wenn unsere Absicht darin bestünde, nach genauen Übereinstimmungen zu suchen, könnten wir das LIKE-Prädikat verwenden, das das abschließende Leerzeichen ignorieren und ein genaueres Ergebnis liefern würde.
Das obige ist der detaillierte Inhalt vonWarum stimmt meine SQL-Abfrage trotz Verwendung des Gleichheitsoperators mit einem nachgestellten Leerzeichen überein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!