मेरे आरंभिक उत्तर ने सुझाव दिया कि व्यवहार में अंतर के लिए ANSI_PADDING ध्वज को OFF पर सेट करना दोष हो सकता है। हालाँकि, यह गलत है; इस ध्वज का केवल भंडारण पर प्रभाव है, लेकिन समानता की तुलना नहीं है।
अंतर Microsoft के SQL मानक के कार्यान्वयन से उपजा है । मानक में कहा गया है कि समानता की जाँच करते समय, समानता ऑपरेटर के बाएँ और दाएँ दोनों तार को समान लंबाई का होना चाहिए । यह निम्नलिखित परिणाम बताते हैं:
insert into test_padding (varchar_clmn, nvarchar_clmn) values ('space ', 'nspace ')
go
-- equality for varchar column
select count(*) from test_padding where varchar_clmn = 'space' -- returns 1
select count(*) from test_padding where varchar_clmn = 'space ' -- returns 1
select count(*) from test_padding where varchar_clmn = 'space ' --returns 1
-- equality for nvarchar column
select count(*) from test_padding where nvarchar_clmn = 'nspace' -- returns 1
select count(*) from test_padding where nvarchar_clmn = 'nspace ' -- returns 1
select count(*) from test_padding where nvarchar_clmn = 'nspace ' --returns 1
LIKE ऑपरेटर अपने ऑपरेंड को पैड नहीं करता है। यह कॉलम VARCHARऔर NVARCHARकॉलम प्रकारों के लिए अलग-अलग व्यवहार करता है :
-- likeness for varchar column
select count(*) from test_padding where varchar_clmn like 'space' -- returns 1
select count(*) from test_padding where varchar_clmn like 'space ' -- returns 1
select count(*) from test_padding where varchar_clmn like 'space ' -- returns 0
-- likeness for nvarchar column
select count(*) from test_padding where nvarchar_clmn like 'nspace' -- returns 0
select count(*) from test_padding where nvarchar_clmn like 'nspace ' -- returns 1
select count(*) from test_padding where nvarchar_clmn like 'nspace ' -- returns 0
ASCII प्रकार के लिए LIKE ऑपरेटर का व्यवहार SQL सर्वर-विशिष्ट है; यूनिकोड प्रकार के लिए यह एएनएसआई-अनुरूप है।
MyString+'x' = ltrim(rtrim(MyString))+'x'जैसा कि इस ब्लॉग पर