다른 명령
CHAR vs. VARCHAR2 값 비교
같은 값을 입력해도 정말 다르게 판단하는 지 검증
1.테이블 생성
-- A CHAR(8), -- B VARCHAR2(8) SQL> CREATE TABLE CHAR_TEST (A CHAR(8),B VARCHAR2(8));
2.두개 컬럼에 '1234' 같은 값을 넣었습니다.
SQL> INSERT INTO CHAR_TEST(A,B) VALUES ('1234','1234') SQL> / 1 개의 행이 만들어졌습니다.
3. 두개 컬럼이 같은값이 같은지 비교해봅니다. 결과값이 보세요 ...없습니다...이럴수가?
SQL> SELECT * FROM CHAR_TEST WHERE A=B; 선택된 레코드가 없습니다.
4. 그럼 두개 컬럼이 다른값인지 비교해봅니다. 있습니다. 이럴수가
SELECT * FROM CHAR_TEST WHERE A<>B A B -------- -------- 1234 1234
결론
- 다르다.
- 왜 그럴까요?
- 문자열 비교 방식이 다르기 때문입니다.
- char,nchar,문자상수,함수리턴값은 길이가 작은컬럼에 공백을 추가하여 비교하고
- varchar2,nvarchar2는 있는 그대로 비교합니다.
- 위 예제에서 A는 char , B는 varchar2
- 즉, '1234공백공백공백공백' = '1234' 로 비교 하게 된것입니다. 그래서 다른값이다 라고 판단합니다.
- 문자열 비교 방식이 다르기 때문입니다.
공백이 있는값 과 공백이 없는값 검증
- 그럼 이것은 어떤 결과가 나올까요?
1. 공백을 넣어보자
SQL> SELECT * FROM CHAR_TEST WHERE A='1234 ' A B -------- -------- 1234 1234
2.공백이 없는경우
SELECT * FROM CHAR_TEST WHERE A='1234' A B -------- -------- 1234 1234