Kim VamPa

SQL 데이터 유형 본문

공부/데이터베이스

SQL 데이터 유형

Kim VamPa 2020. 3. 26. 09:17
728x90
반응형

"SQL 전문가 가이드"책을 개인 공부 후 자료를 남기기 위한 목적이기에 내용 상에 오류가 있을 수 있습니다.


목표

  • SQL 데이터 유형에 대해 공부한다.
  • CHAR vs VARCHAR 차이점 에 대해 이해한다.

목차

1. 데이터 유형

2. CHAR vs VARCHAR 비교

1. 데이터 유형

데이터베이스의 테이블에 특정 자료를 입력할 때, 그 자료를 받아들일 공간을
자료의 유형별로 나누는 기준
  • 특정 칼럼을 정의할 때 선언한 데이터 유형은 그 칼럼이 받아들일 수 있는 자료의 유형을 규정합니다.
  • 선언한 유형이 아닌 종류의 데이터가 들어오려고 하면 데이터베이스는 에러를 발생시킵니다.
  • 데이터 유형과 내장형 함수부분에서 각 회사 제품마다 차이가 있다.
    (ex.
    ANSI/ISO 기준 : NUMERIC Type의 하위개념 으로 NUMERIC, DECIMAL, DEC, SMALLINT, INTEGER, INT, BIGINT, FLOAT, REAL, DOUBLE PRECISION 존재
    Orcle 기준 : NUMBER 한 가지 숫자 타입의 데이터 유형만 지원)

 

자주 쓰이는 데이터 유형정리("SQL 전문가 가이드")

  • CHARACTER(s)
    - 고정 길이 문자열 정보(Oracle, SQL Server 모두 CHAR로 표현)
    - s는 기본 길이 1바이트, 최대 길이 Oracle 2,000바이트, SQL Server 8,000바이트
    - s만큼 최대 길이를 갖고 고정 길이를 가지고 있으므로 할당된 변수 값의 길이가 s보다 작을 경우에는 그차이 길이만큼 공간으로 채워진다.

  • VARCHAR(s)
    - CHARCTER VARYING의 약자로 가변 길이 문자열 정보(Oracle은 VARCHAR2로 표현, SQL Server는 VARCHAR로 표현)
    - s는 최소 길이 1바이트, 최대 길이 Oracle 4,000바이트, SQL Server 8,000바이트
    - s만큼의 최대 길이를 갖지만 가변 길이로 조정이 되기 때문에 할당된 변수값의 바이트만 적용된다.(Limit 개념)
  • NUMERIC
    - 정수, 실수 등 숫자 정보 (Oracle은 NUMBER로, SQL Server는 10가지 이상의 숫자 타입을 가지고 있음)

    - Oracle은 처음에 전체 자리 수를 지정하고, 그 다음 소수 부분의 자리 수를 지정한다. 예를 들어, 정수 부분이 6자리이고 소수점 부분이 2자리인 경우에는 'NUMBER(8,2)'와 같이 된다.
  • DATE
    - 날짜와 시각 정보
    - Orcle은 1초 단위, SQL Server는 3.33ms(Millisecond) 단위 관리
  • 위의 4가지 유형 외에도 ANSI/ISO 에서는 Binary String Type, Binary Large Object String Type, National Character String Type, Bollean Type 등의 다양한 유형이 있다.

 

 

 

 

2. CHAR vs VARCHAR

  • '저장 영역'과 '문자열'을 통한 비교
    - CHAR은 고정 길이 문자열 정보 이기 때문에 입력되는 데이터의 크기가 얼마든 '고정된 데이터 크기'가 저장 영역을 차지합니다.
    - VARCHAR은 가변 길이 문자열 정보이기 때문에 '실제 입력 되는 데이터 크기'만 저장 영역을 차지합니다.
    - 따라서 VARCHAR 길이가 다양한 칼럼과, 정의된 길이와 실제 데이터 길이에 차이가 있는 칼럼에 적합합니다.
  • '비교 방법'을 통한 비교
    - CHAR에서는 문자열을 비교할 때 '공백(BLANK)'을 채워서 비교한다. 공백 채우기 비교에서는 우선 짧은 쪽의 끝에 공백을 추가하여 2개의 데이터가 같은 길이가 되록한다. 그리고 앞에서부터 한 문자씩 비교한다
    => 끝의 공백만 다른 문자열은 같다고 판단된다.
    - VARCHAR에서는 맨처음부터 한 문자씩 비교하고 공백도 하나의 문자로 취급하므로 끝의 공백이 다르면 다른 문자로 판단한다.
ex) CHAR 유형
     'AA' = 'AA  '

- 길이가 짧은 왼쪽 'AA'에 오른쪽의 데이터와 길이가 같도록 공백이 추가된 후 앞에서부터 한 문자씩 비교되기때문에 같은 문자열로 인식합니다.
ex) VARCHAR 유형
    'AA' ≠ 'AA  ' 

- 오른쪽 공백또한 하나의 문자열로 인식하기 때문에 두 문자열 데이터는 같지 않다.

 

  • VARCHAR을 예를 들어 설명하면 VARCHAR(20)으로 0바이트를 설정하더라도 실제 'Kim VapPa' 으로 데이터가 입력된 경우 9바이트의 공간만 차지합니다.  
  • 따라서 주민등록번호, 학생등록번호, 사번 처럼 고정된 길이의 문자열을 같지 않는다면 데이터 유형은 VARCHAR 유형을 적용하는 것이 바람직합니다.
  • VARCHAR, NUMERIC 유형에서 '( )' 을 통해 정의한 길이나 자릿수의 의미는 해당 데이터 유형이 가질 수 있는 최대한의 한계값을 정의 한 것입니다.

 

 

Reference

  • "SQL 전문가 가이드"(kdata 한국데이터산업진흥원)

 

Date

  • 2020.03.26 작성

 

 

 

 

728x90
반응형
Comments