메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Char 와 varchar2 비교

DB CAFE

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