Database/Oracle

[Oracle]오라클 VARCHAR와 NVARCHAR의 차이점

펌킨고구마 2025. 2. 15. 16:01
728x90
반응형

오라클에서 문자열을 저장할 때 사용하는 데이터 타입 중 VARCHARNVARCHAR는 헷갈리기 쉬운 개념입니다. 이 두 가지 타입의 차이를 이해하면 데이터베이스 설계 및 성능 최적화에 도움이 됩니다.

1. VARCHAR vs NVARCHAR 개요

데이터 타입 설명

VARCHAR2(n) 가변 길이 문자열을 저장하며, 한글 등 멀티바이트 문자는 인코딩 방식에 따라 차지하는 바이트 수가 다를 수 있음.
NVARCHAR2(n) 유니코드(UTF-16)를 지원하는 가변 길이 문자열. 한 글자가 항상 2바이트(UTF-16)로 저장됨.

※ 오라클에서는 VARCHAR 대신 VARCHAR2를 사용하며, VARCHAR2가 권장됩니다.

2. 주요 차이점

2.1 저장 방식

  • VARCHAR2: 데이터베이스의 문자셋(Character Set)에 따라 한 글자가 차지하는 바이트 수가 달라짐.
  • NVARCHAR2: 유니코드(UTF-16)로 저장되므로, 한 글자가 항상 2바이트(서로 다른 문자라면 최대 4바이트)를 차지.

2.2 문자셋(Character Set)

  • VARCHAR2는 데이터베이스의 기본 문자셋을 따름.
  • NVARCHAR2는 항상 NLS_NCHAR_CHARACTERSET을 사용하여 저장됨.

2.3 국제화 지원

  • VARCHAR2는 데이터베이스의 문자셋에 따라 특정 언어의 문자를 표현하지 못할 수도 있음.
  • NVARCHAR2는 유니코드를 지원하여 다국어 데이터 저장이 가능.

2.4 성능 및 저장 공간

  • VARCHAR2는 기본 문자셋에 따라 문자당 1~3바이트를 사용하며, 공간 활용이 유리할 수 있음.
  • NVARCHAR2는 유니코드로 저장되므로, 기본 문자셋이 싱글 바이트일 경우 더 많은 공간을 차지할 수 있음.
  • 국제화 지원이 필요하지 않다면 VARCHAR2를 사용하는 것이 성능 면에서 유리할 수 있음.

3. 언제 사용할까?

상황 추천 데이터 타입

단일 언어(예: 영어) 또는 DB 문자셋과 동일한 언어 사용 VARCHAR2
다국어 데이터 저장 필요(예: 한국어, 중국어, 아랍어 등) NVARCHAR2
데이터가 유니코드로 저장될 필요가 있을 경우 NVARCHAR2

4. 예제 코드

VARCHAR2 사용 예제

CREATE TABLE users (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(100) -- DB 문자셋 기준 최대 100바이트 저장
);

NVARCHAR2 사용 예제

CREATE TABLE multilingual_users (
    id NUMBER PRIMARY KEY,
    name NVARCHAR2(100) -- 최대 100글자(유니코드) 저장
);

5. 정리

  • VARCHAR2: 데이터베이스의 기본 문자셋을 사용, 성능이 유리하며 일반적으로 사용됨.
  • NVARCHAR2: 유니코드(UTF-16)로 저장되며 다국어 데이터 처리에 적합.
  • 데이터베이스에서 국제화를 고려하지 않는다면 VARCHAR2를, 다국어 데이터를 저장해야 한다면 NVARCHAR2를 선택하는 것이 좋음.

 

NVARCHAR2로 하면 특수문자도 잘 들어감

728x90
반응형
LIST