I got really angry about this one yesterday as I can't see one possible reason why this "feature" would be required.
If you run this script, the whitespace padded string is also returned along with the unpadded string.
CREATE TABLE #t ([col1] varchar(100))
INSERT INTO #t ([col1]) VALUES ('hello')
INSERT INTO #t ([col1]) VALUES ('hello ')
SELECT '''' + [col1] + '''', LEN([col1]), DATALENGTH([col1])
FROM #t
SELECT * FROM #t WHERE [col1] = 'hello'
SELECT * FROM #t WHERE [col1] = 'hello '
DROP TABLE #t
How can this possibly be right? If I want
'hello ' to be returned, then return
'hello ' not
'hello'. These are two very different strings!
Peoples arguments are
why would want to save that and other such silly statements. My philosophy is, if I can think of it, it will happen! I can think of many cases where it would be beneficial to have the padding - dealing with old systems or external systems over which control is not possible.
Now I know that SQL Server does this stupid thing, I can account for it - but seriously - why?? It's stupid!
Oh and
ANSI_PADDING - makes no odds!