출처 : 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를 사용하는 것이 안전하다.
'CS' 카테고리의 다른 글
Index 인덱스 / Transaction 트랜잭션 (0) | 2024.12.04 |
---|---|
관계형 데이터베이스(RDBMS)와 NoSQL(Not Only SQL) / 레디스 Redis (0) | 2024.12.04 |
조인(Join)의 종류 (0) | 2024.12.03 |