초급의 끄적거림

[데이터 유형] CHAR와 VARCHAR 비교 본문

DB

[데이터 유형] CHAR와 VARCHAR 비교

codingD 2020. 3. 21. 21:23
  • 데이터베이스의 데이터 유형은 Oracle, MySQL 등 벤더 별로 다양한 형태가 제공 됨
  • 예를 들어 숫자타입은 NUMERIC, DECIMAL, DEC, SMALLINT, INTEGER, INT, BIGINT, FLOAT, REAL, DOUBLE 등이 있으나 Oracle의 경우 숫자형 탑입은 NUMBER 한 가지 숫자 타입의 데이터 유형만 지원
데이터 유형 설명
CHAR(n)

 - 고정 길이 문자열 정보

 - n 는 기본 길이 1바이트, 최대길이 oracle 2000byte, SQL server 8000 byte

 - n 만큼 최대길이를 갖고 고정 길이를 가지고 있으므로 할당된 변수 값의 길이가 s 보다 작을 경우에는 그 차지 길이만큼 공간으로 채워짐

VARCHAR(n)

 - CHARACTER VARYING 의 약자로 가변 길이 문자열 정보 (Oralce은 VARCHAR2로 표현, SQL Server는 VARCHAR로 표현)

 - n 는 기본 길이 1바이트, 최대길이 oracle 4000byte, SQL server 8000 byte

 - n 만큼 최대 길이를 갖지만 가변 길이로 조정되기 때문에 할당된 변수값의 바이트만 적용됨

NUMERIC

 - 정수, 실수 등 숫자정보 (Oracle 은 NUMBER. SQL Server는 다양한 숫자 타입 지원()

 - Oracle은 처음에 전체 자리 수를 지정하고, 그 다음 소수 부분의 자리수를 지정

  ex) 정수 부분이 6자리, 소수점 부분이 2자리인 경우 NUMBER(8,2)

DATE

 - 날짜와 시각 정보

 - Oracle은 1초단위, SQL Server는 3.33ms(millisecond) 단위 관리

 

CAHR 와 VARCHAR (VARCHAR2)의 비교


  • 저장영역과 문자열의 비교 방법의 차이
  • VARCHAR 
    • 가변 길이, 필요한 영역은 실제 데이터 크기뿐이기에, 길이가 다양한 컬럼과 정의된 길이의 실제 데이터 길이에 차이가 있는 컬럼에 적합
    • 저장 측면에서도 CHAR 유형보다는 작은 영역에 저장할 수 있다는 장점
  • 비교 방법의 차이
    • CHAR 에서는 문자열을 비교할 때, 공백을 채워서 비교하는 방법 사용
      • CHAR(8) 이고 'AA'가 저장된다면 'AA' 뒤에 공백 6자리를 붙여 8자리로 비교
      • 'AA' = 'AA  '은 실제로 'AA      ' = 'AA      ' 가 되어 같다는 결과가 나옴
    • VARCHAR에서는 공백도 하나의 문자로 취급하여 끝에 공백이 들어가면 다른 문자로 판단
      • 'AA' != 'AA  '  뒤에 공백이 있기 때문에 둘이 다른 문자로 판단
  • 때문에 이름, 주소 등의 길이가 변할 수 잇는 값은 VARCHAR를 사용하고, 사번, 주민등록번호 같은 길이가 일정한 데이터는 CHAR를 사용하는게 좋다.
Comments