출처 : chatGPT

 

1. 문자 인코딩 차이 

- VARCHAR: ANSI 또는 UTF-8을 사용해 문자 데이터를 저장합니다.
영문자, 숫자, 일부 특수 문자를 저장할 때 주로 사용됩니다.
한글, 중국어, 일본어 같은 다국어 문자를 저장할 수 있지만, UTF-8을 사용해야 정상적으로 저장됩니다.

 

- NVARCHAR: **Unicode (UTF-16)**을 사용해 문자 데이터를 저장합니다.
다국어 문자 지원이 기본적으로 내장되어 있어 모든 언어의 문자를 손실 없이 저장할 수 있습니다.
N은 National을 의미하며, 문자셋에 관계없이 다양한 언어를 처리하는 데 최적화되어 있습니다.

 

2. 저장 공간

- VARCHAR(n):
문자 1개당 1~3바이트가 필요합니다(UTF-8 기준).
n은 문자 개수를 의미합니다.
예: VARCHAR(10)은 최대 10자를 저장하며, 최대 30바이트를 사용할 수 있습니다.


- NVARCHAR(n):
문자 1개당 2~4바이트가 필요합니다(UTF-16 기준).
n은 문자 개수를 의미합니다.
예: NVARCHAR(10)은 최대 10자를 저장하며, 최대 20~40바이트를 사용할 수 있습니다.

 

3. 사용 시 고려사항 

 

4. MySQL 에서의 사용 

- VARCHAR는 UTF-8이 기본 설정이라면, 대부분의 문자를 저장할 수 있다.

- NVARCHAR는 MySQL 8.0 부터 UTF-8과 동일하게 동작한다. 따라서 최근에는 VARCHAR를 주로 사용하는 추세.

 

5. MSSQL 에서의 사용 

- VARCHAR는 한글, 중국어, 일본어 처럼 비 ASCII 문자를 처리할때 데이터  손실이 발생 할 수 있다. 

- NVARCHAR는 Unicode 지원이 내장되어 있어 다국어 데이터 저장 시 권장된다. 

 

언제 사용해야 할까? 

1. 다국어(한글, 일본어, 중국어, 이모지 등)을 저장할 필요가 있다면 ? NVARCHAR 를 사용

2, 영어와 숫자만 저장한다면 ? VARCHAR가 더 효율적 이다. 

 

사용 예시

1. VARCHAR 사용 예시 (MySQL) 

CREATE TABLE users (
    username VARCHAR(50),
    email VARCHAR(100)
);

 

2. N VARCHAR 사용 예시(MSSQL) 

CREATE TABLE users (
    username NVARCHAR(50),
    email NVARCHAR(100)
);

 

 

정리

다국어 지원이 필요하다면 NVARCHAR , 영문이나 숫자만 사용할 경우 VARCHAR가 더 효율적

단, MySQL의 경우 VARCHAR를 사용해도 한글을 저장할 수 있으나, MSSQL은 반드시 NVARCHAR를 사용하는 것이 안전하다. 

+ Recent posts