Pourquoi SQL ignore les espaces supplémentaires à la fin d'une string?

j'ai un code

DECLARE @A VARCHAR(10) = 'A' DECLARE @B VARCHAR(10) = 'A ' IF(@A=@B) SELECT 'Equal' ELSE SELECT 'Not Equal' 

Ici @A et @B ne sont pas égaux.

Pour ne pas ignorer les espaces supplémentaires à la fin, j'ai essayé

 IF(REPLACE(@B,' ','.') = REPLACE(@A,' ','.')) 

Mes questions sont:

  1. Pourquoi SQL les traite comme égaux?
  2. Y a-t-il d'autres moyens de le faire?

@A et @B sont égaux. Ils ne sont simplement pas les mêmes 🙂 Lors de la comparaison de strings, SQL Server considère que toutes les variantes d'une string avec des espaces de fin sont égales. En outre, le classment actif peut regrouper des strings supplémentaires dans cette class d'équivalence.

Si vous voulez comparer deux strings d'une manière qui distingue les espaces de fin, utilisez l'opérateur like. par exemple

 select 1 where 'a' like 'a ' 

Voir

INF: Comment SQL Server compare les strings avec des espaces de fin