내 초기 답변은 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 Server에 따라 다릅니다. 유니 코드 유형의 경우 ANSI와 호환됩니다.
MyString+'x' = ltrim(rtrim(MyString))+'x'
제안한대로 확인하는 해결 방법을 찾았습니다