Char 와 varchar2 비교
DB CAFE
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
1 CHAR vs. VARCHAR2 값 비교[편집]
1.1 같은 값을 입력해도 정말 다르게 판단하는 지 검증[편집]
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
1.2 결론[편집]
- 다르다.
- 왜 그럴까요?
- 문자열 비교 방식이 다르기 때문입니다.
- char,nchar,문자상수,함수리턴값은 길이가 작은컬럼에 공백을 추가하여 비교하고
- varchar2,nvarchar2는 있는 그대로 비교합니다.
- 위 예제에서 A는 char , B는 varchar2
- 즉, '1234공백공백공백공백' = '1234' 로 비교 하게 된것입니다. 그래서 다른값이다 라고 판단합니다.
- 문자열 비교 방식이 다르기 때문입니다.
1.3 공백이 있는값 과 공백이 없는값 검증[편집]
- 그럼 이것은 어떤 결과가 나올까요?
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