본문 바로가기
IT정보

ORACLE 문자 데이터 유형

by 디노프랭키 2023. 4. 16.
728x90

ORACLE 데이터 타입

앞서 설명한 데이터베이스란 주제의 이전글에 관계형 데이터베이스 중 Oracle의 데이터 타입을 알아보겠습니다. 앞으로도 관계형 데이터베이스 Oracle을 기준으로 데이터베이스 기초 이론을 정리하려고 합니다. 데이터 타입에는 크게 문자, 숫자, 날짜 및 시간, LOB 데이터 유형으로 나눌 수 있습니다. 그중 오늘은 문자 데이터 유형을 알아보겠습니다.

ORACLE 문자 데이터 유형

CHAR (최대 2,000Byte)

고정길이의 문자열 데이터를 저장. CHAR데이터 타입은 반드시 칼럼 선언 시 CHAR타입과 함께 길이를 선언해 주어야 합니다. CHAR길이를 20으로 선언하는 경우 테이블생성 시 칼럼명 옆에 CHAR(20)으로 선언을 하며 데이터 저장 시에 선언된 CHAR길이 보다 작은 문자열이 저장될 경우 빈공백으로 채워서 저장이 됩니다. 만약 선언된 CHAR길이 이상으로 문자열이 저장되면 오류가 발생하게 됩니다. 데이터의 길이가 일정하게 정해져 있는 문자열을 칼럼으로 사용할 때 CHAR로 지정하는 게 좋습니다. 공백도 데이터베이스에선 용량으로 차지할 테니까요. 예를 들면 날짜의 년월일을 문자열로 저장을 한다거나 길이가 두 자리로 된 문자열 코드값을 저장할 때 말이죠.

-- 테이블 생성(생성 시 USER_NAME을 CHAR로 선언)
CREATE TABLE USER (
    USER_NO NUMBER(10),
    USER_NAME CHAR(20),
    INS_DATE DATE
);

-- CASE1. 데이터 저장 
-- USER_NAME에 들어가는 문자열은 'TEST________________'로 공백이 16자리가 채워서 들어가집니다.
INSERT INTO USER VALUES(100001, 'TEST', SYSDATE);

-- CASE2. 데이터 조회
-- CASE1에서 TEST로 저장했지만 공백 때문에 조건에 맞지 않아 데이터가 조회되지 않습니다.
SELECT USER_NO, USER_NAME, INS_DATE
  FROM USER
 WHERE USER_NAME = 'TEST';

-- CASE3. 데이터 조회
-- 데이터 정상 조회 됨
SELECT USER_NO, USER_NAME, INS_DATE
  FROM USER
 WHERE USER_NAME LIKE 'TEST%';

-- CASE3. 데이터 저장 
-- 문자열 길이가 21Byte로 INSERT시 오류가 발생하게 됩니다
INSERT INTO USER VALUES(100001, 'MyNameTestBlogTistory', SYSDATE);

(최대 4,000Byte)

는 가변길이의 ASCII문자열 값을 저장하는 데 사용됩니다. CHAR의 반대의 개념이죠. 의 숫자 2는 Oracle 버전 2에 처음으로 가변길이 문자열이 도입되어 2가 붙여지게 되었습니다. 데이터베이스를 설계하고 구성할 때 일반적으로 NUMBER 타입과 더불어 가장 많이 사용되는 데이터 타입 형태입니다.

-- 테이블 생성(생성 시 USER_NAME을  로 선언)
CREATE TABLE USER (
    USER_NO NUMBER(10),
    USER_NAME  (20),
    INS_DATE DATE
);

-- CASE1. 데이터 저장 
-- USER_NAME에 들어가는 문자열은 'TEST'로 가변 4자리로 들어가집니다.
INSERT INTO USER VALUES(100001, 'TEST', SYSDATE);

-- CASE2. 데이터 조회
-- CHAR의 경우는 조회가 되지 않지만  의 경우 정상 조회됩니다.
SELECT USER_NO, USER_NAME, INS_DATE
  FROM USER
 WHERE USER_NAME = 'TEST';

-- CASE3. 데이터 조회
-- USER_NAME의 데이터가 'TEST'로 저장이 되어 이것도 정상 조회 됩니다.
SELECT USER_NO, USER_NAME, INS_DATE
  FROM USER
 WHERE USER_NAME LIKE 'TEST%';

-- CASE3. 데이터 저장 
-- CHAR와 마찬가지로 문자열 길이가 21Byte로 INSERT시 오류가 발생하게 됩니다
INSERT INTO USER VALUES(100001, 'MyNameTestBlogTistory', SYSDATE);

NCHAR (최대 2,000Byte)

NCHAR 데이터 유형은 고정 길이 유니코드 문자열을 저장합니다. CHAR앞에 N은 National을 의미하며 이는 국제 문자셋을 지원한다는 것을 의미합니다. 좀 더 쉽게 설명드리자면 각 문자가 2Byte로 저장이 됩니다. "테스트"라는 문자열을 저장할 때 CHAR는 3Byte로 저장이 되고 NCHAR은 6Byte로 공간을 사용하게 됩니다. 총 문자열 길이는 고정 길이지만 문자열의 수에 따라 가변길이로 저장이 됩니다. 문자열 길이가 일정하다면 CHAR을 사용하고, 국제문자셋을 지원하거나 문자열의 길이가 가변적이어야 할 경우 NCHAR 유형을 사용하는 것이 좋습니다.

-- 테이블 생성(생성 시 USER_NAME을 NCHAR로 선언)
CREATE TABLE USER (
    USER_NO NUMBER(10),
    USER_NAME NCHAR(10),
    INS_DATE DATE
);

-- CASE1. 데이터 저장 
-- USER_NAME에 들어가는 문자열은 'TEST__'로 가변 8자리로 들어가집니다.
INSERT INTO USER VALUES(100001, 'TEST', SYSDATE);

-- CASE2. 데이터 조회
-- CHAR와 마찬가지로 공백2자리가 저장되므로 조회가 되지 않습니다.
SELECT USER_NO, USER_NAME, INS_DATE
  FROM USER
 WHERE USER_NAME = 'TEST';

-- CASE3. 데이터 조회
-- 정상 조회 됩니다.
SELECT USER_NO, USER_NAME, INS_DATE
  FROM USER
 WHERE USER_NAME LIKE 'TEST%';

-- CASE3. 데이터 저장 
-- 문자열 길이가 12Byte로 INSERT시 오류가 발생하게 됩니다(오류코드 ORA-01438)
INSERT INTO USER VALUES(100001, 'ORANGE', SYSDATE);

NVARCAR2 (최대 4,000Byte)

N 데이터 유형은 가변 길이의 Unicode 문자열을 저장하는 데 사용합니다. Unicode 문자열은 다양한 언어의 문자를 지원하므로, 다국어 데이터를 저장할 때 사용합니다. N 데이터 유형은 다국어 문자열에 대한 인덱스를 생성할 수 있어서 검색 성능을 향상할 수 있습니다. 글로벌 회사나 다국어 데이터를 다루는 웹 사이트의 경우 N 를 사용하여 다양한 언어를 지원할 수 있습니다.

-- 테이블 생성(생성 시 USER_NAME을 N 로 선언)
CREATE TABLE USER (
    USER_NO NUMBER(10),
    USER_NAME N (10),
    INS_DATE DATE
);

-- CASE1. 데이터 저장 
-- USER_NAME에 들어가는 문자열은 'TEST'로 가변 8자리로 들어가집니다.
INSERT INTO USER VALUES(100001, 'TEST', SYSDATE);

-- CASE2. 데이터 조회
--  와 마찬가지로 가변문자열 'TEST'만 저장되므로 정상 조회 됩니다.
SELECT USER_NO, USER_NAME, INS_DATE
  FROM USER
 WHERE USER_NAME = 'TEST';

-- CASE3. 데이터 조회
-- 정상 조회 됩니다.
SELECT USER_NO, USER_NAME, INS_DATE
  FROM USER
 WHERE USER_NAME LIKE 'TEST%';

-- CASE3. 데이터 저장 
-- 문자열 길이가 12Byte로 INSERT시 오류가 발생하게 됩니다(오류코드 ORA-01438)
INSERT INTO USER VALUES(100001, 'ORANGE', SYSDATE);

지금까지 ORACLE 문자 데이터 타입에 대해 알아봤습니다.

많은 도움 되셨길 바랍니다

728x90

'IT정보' 카테고리의 다른 글

SQL 기본 문법  (0) 2023.04.20
ORACLE LOB 데이터 유형  (0) 2023.04.19
ORACLE 날짜 및 시간 데이터 유형  (0) 2023.04.18
ORACLE 숫자 데이터 유형  (0) 2023.04.17
데이터베이스란?  (1) 2023.04.15

댓글