2013-07-26 15 views
8

Ho scritto una queryPerché SQL Server ignora automaticamente lo spazio vuoto alla fine?

SELECT * FROM Users WHERE UserName = 'admin ' 

digitando sbaglia. Ma ho scoperto che il risultato è lo stesso di

SELECT * FROM Users WHERE UserName = 'admin' 

Sembra che lo spazio vuoto alla fine viene ignorato da SQL Server automaticamente.

Qualcuno può dirmi perché?

FYI, la colonna UserName è di tipo nvarchar(MAX).

risposta

15

SQL Server sta seguendo lo standard ANSI/ISO per il confronto delle stringhe.

L'articolo How SQL Server Compares Strings with Trailing Spaces lo spiega in dettaglio.

SQL Server segue la specifica ANSI/ISO SQL-92 ... su come confrontare stringhe con spazi. Lo standard ANSI richiede il riempimento per delle stringhe di caratteri utilizzate nei confronti in modo che le loro lunghezze corrispondano a prima di confrontarle. Il padding influisce direttamente sulla semantica dei predicati della clausola WHERE e HAVING della clausola e di altri stringhe Transact-SQL. Ad esempio, Transact-SQL considera le stringhe "abc" e "abc" equivalenti per la maggior parte delle operazioni di confronto.

Inoltre, come spiegato in questo articolo, se si confronta con LIKE fate non ottenere questo comportamento.

3

se si sta cercando come questo

SELECT * 
FROM Users 
WHERE UserName = 'admin ' 

spazi vuoti vengono ignorati SQL Server. Ma se ci provi così

SELECT * 
FROM Users 
WHERE UserName Like 'admin ' 

Considera anche gli spazi vuoti.

DECLARE @Person1 varchar(50)='admin' 
SELECT 1 WHERE @Person1 = 'admin ' 
SELECT 1 WHERE @Person1 like 'admin ' 

Il risultato della serie di query sopra è

enter image description here

Problemi correlati