A2 필드의 데이터 타입은 char(10)이고 A3 필드의 데이터 타입은 varchar(10)입니다.
아래와 같이 테이블에 데이터가 들어있습니다.(아래에서 b는 영문자 b가 아닌 공백(스페이스)를 의미합니다.)
A1 A2 A3
------------------------------
1 고등어 고등어
2 오징어 오징어
3 고등어bb 고등어bb
4 명태 명태
라고 되어 있을 때
SELECT *
FROM TEST
WHERE A2='고등어'
라고 검색을 하면 아래와 같이 검색이 됩니다.
A1 A2 A3
------------------------------
1 고등어 고등어
3 고등어bb 고등어bb
SELECT *
FROM TEST
WHERE A2='고등어bbbbbb'
라고 검색을 해도 아래와 같이 검색이 됩니다.
A1 A2 A3
------------------------------
1 고등어 고등어
3 고등어bb 고등어bb
WHERE 절의 A2 대신에 A3을 해도 결과는 동일합니다.
(다시 한번 말씀드리지만 b는 알파벳 b가 아니고 공백을 의미합니다.)
데이터 처리시에 문자열 뒤의 공백은 무시 되는건가요?
예전에는 char형과 varchar형을 처리할 때 trim을 쓴다던지 해서 처리하는 방법이 달랐던것 같은데
이러면 SQL 상에서는 처리하는 방법이 동일하게 되는건가요?
프로그램과 연동되어 변수에 담았을때는 또 다르겠지만요...
Comment 1
-
이스트럭(강동운)
2014.03.19 19:10
안녕하세요~!
SQL Server는 문자열 뒤에 공백은.. 상관없이 처리를 한다고 합니다.
참고글: http://blog.naver.com/locusty/80018525447
하지만.. binary 형으로 형변환 해보시면.. CHAR는 스페이스가 저장되는 것을 볼 수 있습니다.
SELECT CONVERT(BINARY, A2), CONVERT(BINARY, A3) FROM 테이블
VARCHAR 문자열 뒤에 스페이스공백을 저장하는 방법이 있습니다.
SET ANSI_PADDING ON 하시면 되는데..
실제로 문자열 뒤에 스페이스는 아무런 의미가 없기 때문에..(실제로 거~~의 안쓰이기 때문..)
그냥 이런게 있다 정도만 아시면 될듯합니다 ^^;
감사합니다.