행위

Char 와 varchar2 비교

DB CAFE

thumb_up 추천메뉴 바로가기


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