💻Programming/Oracle

[Oracle/오라클] 데이터 타입 - 문자열형

horang_dev 2021. 3. 11. 20:28

 문자열형 

 - 고정길이 형식 : CHAR

 - 가변길이 형식 : VARCHAR, VARCHAR2, LONG, CLOB, NVARCHAR2, NCLOB

   : 사용자가 입력한 데이터만큼 저장공간을 사용하고, 남은 저장공간은 시스템에 반환.

 

 1) CHAR

    - 고정길이 문자열 저장.

    - 저장공간이 남으면 오른쪽에 공백이 삽입되어 저장.

    - 입력한 데이터가 지정해놓은 저장공간보다 크면 오류

    - 한글 한 글자는 3BYTE로 처리함.

    - 최대 2000BYTE까지 저장 가능.

    

    컬럼명 CHAR ( 크기 [ BYTE | CHAR ] ) ;

      - 크기 : 1 ~ 2000

      - BYTE | CHAR : 크기로 지정한 값이 BYTE 값인지 CHAR 갯수인지 지정함. 

      - 'CHAR'로 지정되더라도 2000BYTE를 초과할 수 없으며, DEFAULTBYTE

ex) CREATE TABLE temp01(
        col01 CHAR (20 BYTE),
        col02 CHAR (20 CHAR), 
        col03 CHAR (20));

 2) VARCHAR2

    - 가변길이 문자열 저장.

    - 1 ~ 4000 BYTE 처리 가능

    - 오라클에서만 사용 가능한 데이터 타입 

 

    컬럼명 VARCHAR2 ( 크기 [ BYTE | CHAR ] ) ;

      - 크기 : 1 ~ 4000

      - BYTE | CHAR : 크기로 지정한 값이 BYTE 값인지 CHAR 갯수인지 지정함. 

      - 'CHAR'로 지정되더라도 4000BYTE를 초과할 수 없으며, DEFAULT BYTE

 

ex) CREATE TABLE temp02(
        col01 VARCHAR2 (50 BYTE),
        col02 VARCHAR2 (50 CHAR), 
        col03 VARCHAR2 (50));

 3) NVARCHAR2, VARCHAR

    - VARCHAR와 VARCHAR2는 동일 기능 제공

    - Oracle사에서는 VARCHAR2 사용 권고

    - NVARCHAR2는 국제표준코드(다국적 언어)를 사용하여 문자열 저장

    - UTF-8 (가변길이), UTF-16 (고정길이) 형식으로 처리

 


 4) LONG

    - 대용량 가변길이 자료 저장

    - 2GB까지 처리 가능

    - 제약 사항 : 한 테이블에 한 컬럼만 LONG타입으로 선언가능

    - 현재 기능 개선이 종료되어 CLOB 타입으로 대체 됨.

    - 크기 지정 안함.

 

    컬럼명 LONG;

ex) CREATE TABLE temp03(
        col01 LONG,
        col02 CLOB, 
        col03 VARCHAR2 (3000));

 5) CLOB

    - LOB (Large Objects) 타입

    - 대용량 자료 (4GB) 를 저장하기 위한 데이터 타입

    - 여러 컬럼에서 동시에 사용 가능 (LONG타입의 제약 사항 개선)

    - 일부 기능은 DBMS_LOB API 지원을 받아야 함. (LENGTH, SUBSTR 등)

    - 자료의 크기는 문자열 수로 반환 (GETLENGTH)

 

    컬럼명 CLOB;

ex) CREATE TABLE temp04(
        col01 CLOB,
        col02 CLOB, 
        col03 VARCHAR2 (100));
        
    INSERT INTO temp04 (col01, col02, col03)
         VALUES ('무궁화 꽃이', '무궁화 꽃이 피었습니다. 무궁화 꽃은', 'ABCDEFGHIJKLMN');
         
     SELECT SUBSTR(col02, 2, 5) FROM temp04; -- col02의 2번째 글자에서 5개 ('궁화 꽃이')
     SELECT DBMS_LOB.SUBSTR(col02, 2, 5) FROM temp04; -- col02의 5번째 글자에서 2개 ('꽃이')
반응형