개발/SQL

Oracle 데이터 타입 - 문자열

함수형 인간 2025. 2. 21. 02:07

1. CHAR (고정 길이 문자열)

  • 특징:
    • 고정 길이 문자열 데이터를 저장.
    • 최대 2000바이트까지 저장 가능.
    • 지정된 길이보다 짧은 문자열이 저장되면 나머지 공간은 공백으로 채워짐.
    • 주로 기본 키나 길이가 고정된 데이터(우편번호, 주민등록번호 등)를 저장하는 데 사용.
  • 사용 형식:
    • 컬럼명 CHAR(크기 [BYTE|CHAR]);
      • 크기: 확보되는 기억 공간의 크기 (1 ~ 2000).
      • BYTE|CHAR: 생략 시 BYTE로 간주. 'CHAR'를 사용하면 '크기'는 문자 수를 의미.
      • 데이터베이스의 문자 집합에 따라 실제 저장되는 문자 수가 달라질 수 있다. 예를 들어, UTF-8 문자 집합에서는 한글 한 글자가 3바이트를 차지한다.
  • 사용 예시:
    SQL
     
     
CREATE TABLE TEMP01(
    COL1  CHAR(10),
    COL2  CHAR(10 BYTE),
    COL3  CHAR(10 CHAR)
);

INSERT INTO TEMP01(COL1,COL2,COL3)
    VALUES('SEOUL','대전시','대전시 중구 계룡로');

SELECT * FROM TEMP01;

2. VARCHAR2 (가변 길이 문자열)

  • 특징:
    • 가변 길이 문자열 데이터를 저장.
    • 최대 4000바이트까지 저장 가능.
    • 실제 문자열의 길이만큼만 저장 공간을 사용.
    • 오라클에서는 VARCHAR2 사용을 권장.
  • 사용 형식:
    • 컬럼명 VARCHAR2(크기 [BYTE|CHAR]);
      • 크기: 확보되는 기억 공간의 크기 (1 ~ 4000).
      • BYTE|CHAR: 생략 시 BYTE로 간주. 'CHAR'를 사용하면 '크기'는 문자 수를 의미.
  • 사용 예시:
    SQL
     
     
CREATE TABLE TEMP02(
    COL1 CHAR(100),
    COL2 VARCHAR2(4000),
    COL3 VARCHAR2(4000 BYTE),
    COL4 VARCHAR2(4000 CHAR)
);

INSERT INTO TEMP02 VALUES('IL POSTINO','BOYHOOD','BOYHOOD','대전시 중구 계룡로 846');

SELECT * FROM TEMP02;

SELECT LENGTHB(COL1), LENGTHB(COL2), LENGTHB(COL3), LENGTHB(COL4), LENGTH(COL4) FROM TEMP02;

3. NVARCHAR2 (가변 길이 유니코드 문자열)

  • 특징:
    • 가변 길이 유니코드 문자열 데이터를 저장.
    • 다국어 지원이 필요한 환경에서 유용하게 사용.
    • 문자 단위로 길이를 처리하므로, 다양한 문자 집합의 데이터를 일관되게 관리할 수 있다.
  • 사용 형식:
    • 컬럼명 NVARCHAR2(크기);
      • 크기: 문자 수를 의미.
  • 추가사항:
    • 데이터를 국제 표준 코드(UTF-8, UTF-16) 방식으로 저장.

4. LONG (대용량 문자열)

  • 특징:
    • 대용량 문자열 데이터를 저장.
    • 최대 2GB까지 저장 가능.
    • 오라클 초기 버전부터 제공되었지만, 현재는 CLOB 타입으로 대체되고 있다.
    • 한 테이블에 하나의 LONG 타입 컬럼만 사용할 수 있다.
    • 다양한 SQL 기능에서 제한적으로 사용.
  • 사용 형식:
    • 컬럼명 LONG;
  • 사용 예시:
    SQL
     
     
CREATE TABLE TEMP03(
    COL1 VARCHAR2(2000),
    COL2 LONG,
    COL3 VARCHAR2(3000)
);

INSERT INTO TEMP03(COL1,COL2) VALUES('IL POSTINO', 'BOYHOOD');

SELECT * FROM TEMP03;

5. CLOB (Character Large Object)

  • 특징:
    • 대용량 문자열 데이터를 저장.
    • 최대 4GB까지 저장 가능.
    • 한 테이블에 여러 개의 CLOB 타입 컬럼을 사용할 수 있다.
    • LONG 타입의 기능 개선 버전.
    • 일부 기능은 DBMS_LOB API를 사용해야 한다.
    • CLOB 데이터를 다룰 때 성능에 영향을 미칠 수 있으므로, 인덱싱, 검색, 업데이트 등의 작업을 최적화하는 방법을 고려해야 한다.
  • 사용 형식:
    • 컬럼명 CLOB;
  • 사용 예시:
    SQL
     
     
CREATE TABLE TEMP04(
    COL1 CLOB,
    COL2 CLOB,
    COL3 CLOB
);

INSERT INTO TEMP04(COL1,COL2) VALUES('무궁화 꽃이 피었습니다.', '대전시 중구 계룡로 846');

SELECT * FROM TEMP04;

SELECT LENGTH(COL2) FROM TEMP04;

SELECT DBMS_LOB.GETLENGTH(COL1) FROM TEMP04;

SELECT SUBSTR(COL1, 3, 4) AS 컬럼1, DBMS_LOB.SUBSTR(COL1,3,4) AS 컬럼2 FROM TEMP04;

데이터 타입 선택 가이드라인:

  • 고정 길이 데이터: CHAR
  • 가변 길이 데이터: VARCHAR2 또는 NVARCHAR2
  • 대용량 텍스트 데이터: CLOB

참고 사항:

  • LENGTHB() 함수는 문자열의 바이트 길이를 반환하고, LENGTH() 함수는 문자 길이를 반환.