2016-06-03 2 views
0

char vs varchar의 차이점에 대해 읽었습니다. ANSI_PADDING이 설정되어 있으면 쿼리 할 때 차이가 발생할 것으로 예상됩니다. 예를 들어, ANSI_PADDING이 켜져 있고 char (10)로 설정된 열이 있다면 열에 삽입하면 'a'라고 말하면 9 자의 공백을 채울 것으로 예상됩니다. 따라서, 나는 'a'의 char 열을 쿼리 할 수 ​​없어야한다고 읽었지만 'a_________'(공백은 _)를 쿼리해야합니다. 어쨌든, 결과를 반환 할 것이라고 기대하지 않는 아래 예가 있습니다. 나 인생에서 ANSI_PADDING이 on/off인지에 따라 다른 결과를 반환하는 예제를 만들 수는 없다.Ansi_Padding 설정 - 차이가 나타나지 않습니까?

SET ANSI_PADDING ON 

DECLARE @table TABLE 
(
[identity] int identity(1,1) 
,[char] char(10) 
,[varchar] varchar(10) 
) 


INSERT INTO @table 

SELECT 'a', 'a' 

SELECT * FROM @table 
WHERE [char] = 'a' -- I expect this to not return results... 

SELECT * FROM @table 
WHERE [varchar] = 'a' 

답변

3

비교는, 문자/VARCHAR 데이터에 후행 공백을 무시 그래서 당신의 비교 'A'전용 공간 ('a ', 'a ' 등) 뒤의 다른 값에 타격을 줄 것으로 예상된다. 다음 쿼리를 살펴보십시오.

SET ANSI_PADDING ON 

create table #moose (
     charval char(10), 
     varcharval varchar(10) 
    ) 

insert #moose select 'one', 'one' 

select '"' + charval + '"', 
     '"' + varcharval + '"' 
    from #moose 

drop table #moose 

실제로 charval이 공백으로 채워져 있음을 알 수 있습니다.

관련 문제