데이터 타입(Datatype)이란 컬럼이 저장되는 데이터 유형을 말하며, 

오라클에서는 기본으로 제공되는 기본 데이터 타입(원시 데이터 타입이라고도 함)과 사용자 정의 데이터 타입으로 구분할 수 있다. 

 

문자나 문자열 데이터는 문자형 데이터에 속하며, 오라클에서 제공하는 문자형은 다음과 같다.

데이터 타입 설명
CHAR (크기[ BYTE | CHAR ]) 고정길이 문자, 최대 2000byte, 디폴트 값은 1byte
VARCHAR2 (크기[ BYTE | CHAR ]) 가변길이 문자, 최대 4000byte, 디폴트 값은 1byte
NCHAR (크기) 고정길이 유니코드 문자(다국어 입력 가능), 최대 2000byte, 디폴트 값은 1
NVARCHAR2 (크기) 가변길이 유니코드 문자(다국어 입력 가능), 최대 4000byte, 디폴트 값은 1
LONG 최대 2GB 크기의 가변길이 문자형, 잘 사용하지 않음

가변길이라 함은 실제 입력된 데이터 길이에 따라 크기가 변해 정해지는 것을 말한다. 

예를 들어, 특정 컬럼을 VARCHAR2(10)으로 선언하면, 10byte까지 데이터를 입력할 수 있다. 

그런데 이 컬럼에 ‘abc’라고 세 글자만 입력하면 실제 컬럼 길이는 3byte가 된다. 

반면 고정길이 CHAR(10)으로 만든 후 ‘abc’라고 입력하면 세 문자만 입력됐더라도 이 컬럼 길이는 10byte가 된다. 

 

CREATE TABLE ex2_1 (
	COLUMN1    CHAR(10 byte), 
	COLUMN2    VARCHAR2(10 byte)
);
    

결과
    table EX2_1이(가) 생성되었습니다.
INSERT INTO ex2_1 ( column1, column2 ) VALUES ('abc', 'abc');

SELECT column1, LENGTH(column1) as len1,
	column2, LENGTH(column2) as len2
FROM ex2_1;


결과
	COLUMN1      LEN1     COLUMN2        LEN2
	------------ -------- -------------- ----------
	abc          10       abc            3

LENGTH 라는 SQL 함수는 컬럼 길이를 반환한다.

 

결과를 보면 같은 값을 입력했지만 CHAR 타입은 길이가 3이 아닌 10임을 알 수 있다.

SQL을 작성하고 사용하는 측면에서 CHAR VARCHAR2 타입은 실질적 차이가 없으므로

문자형 컬럼은 저장 공간 효율화를 위해 CHAR보다는 VARCHAR2를 사용하는 것이 좋다.

 

 

컬럼 타입을 선언할 때 크기(숫자)만 명시하면 디폴트 값인 byte가 적용된다.

영어에서 한 문자는 1byte를, 한글은 2byte를 차지한다. (DB설정에 따라 3byte를 차지하기도 함)

 

CREATE TABLE ex2_2 (
	COLUMN1    VARCHAR2(3), -- 디폴트 값인 byte 적용
	COLUMN2    VARCHAR2(3 byte),
	COLUMN3    VARCHAR2(3 char)
);


결과
	table EX2_2이(가) 생성되었습니다.
INSERT INTO ex2_2 VALUES ('abc', 'abc', 'abc');

SELECT column1, LENGTH(column1) AS len1,
	column2, LENGTH(column2) AS len2,
	column3, LENGTH(column3) AS len3
FROM ex2_2;


결과
	COLUMN1 LEN1 COLUMN2 LEN2 COLUMN3 LEN3
	------- ---- ------- ---- ------- ----
	abc        3     abc    3     abc    3

영문자는 크기가 모두 3byte다. 

 

 

INSERT INTO ex2_2 VALUES ('홍길동', '홍길동', '홍길동');


결과
	SQL 오류: ORA-12899: "ORA_USER"."EX4_2"."COLUMN1" 열에 대한 값이 너무 큼(실제: 6, 최대값: 3)

한글은 한 글자가 2byte이므로 column1에 입력할 때 오류가 발생했다.

하지만 column3에서는 byte가 아닌 char를 명시했기 때문에 입력할 수 있다.

 

 

INSERT INTO ex2_2 (column3) VALUES ('홍길동');


결과
	1개 행 이(가) 삽입되었습니다.

 

SELECT column3, LENGTH(column3) AS len3, LENGTHB(column3) AS bytelen
FROM ex2_2;


결과
	COLUMN3      LEN3       BYTELEN
	------------ ---------- ----------
	abc          3          3
	홍길동	     3          6

LENGTHB는 해당 컬럼의 byte 수를 반환하는 함수로,

위 결과를 보면 한글은 2byte이므로 총 6byte를 차지했음을 알 수 있다.

'oracle' 카테고리의 다른 글

데이터 타입 _날짜  (0) 2021.04.01
데이터 타입 _숫자  (0) 2021.04.01
데이터베이스 객체 _테이블 (생성)  (0) 2021.04.01
데이터베이스 객체의 개요  (0) 2021.04.01
PL/SQL의 개요  (0) 2021.04.01

+ Recent posts