আমার প্রাথমিক উত্তরে পরামর্শ দেওয়া হয়েছে যে এএনএসআইপ্যাডিং পতাকাটি অফে সেট করা আচরণের পার্থক্যের জন্য দোষী হতে পারে। তবে এটি ভুল; এই পতাকাটি কেবল স্টোরেজে প্রভাব ফেলে তবে সমতার তুলনা করে না।
পার্থক্য থেকে ডালপালা এসকিউএল মান Microsoft এর বাস্তবায়ন । স্ট্যান্ডার্ডটি বলেছে যে সাম্যতার জন্য পরীক্ষা করার সময়, সমতা অপারেটরের বাম এবং ডান উভয় স্ট্রিংকে একই দৈর্ঘ্যের জন্য প্যাড করতে হবে । এটি নিম্নলিখিত ফলাফল ব্যাখ্যা করে:
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 অপারেটরের আচরণটি এসকিউএল সার্ভার-নির্দিষ্ট; ইউনিকোড প্রকারের জন্য এটি এএনএসআই-সম্মতিযুক্ত।
MyString+'x' = ltrim(rtrim(MyString))+'x'
প্রস্তাবিত হিসাবে যাচাই করা উচিত