출처 : 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' 카테고리의 다른 글

조인(Join)의 종류  (0) 2024.12.03

출처 : 면접을 위한 CS 전공지식 노트

 

- SQL 조인 시각화 사이트 

https://sql-joins.leopard.in.ua/ 

 

SQL Joins Visualizer

Please select how do you want to do SQL JOIN between two table Copy SQL

sql-joins.leopard.in.ua

 

 

조인(join)이란 하나의 테이블이 아닌 두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것을 말한다.

 

조인의 종류

1. 내부 조인(inner join) : 두 테이블 간의 교집합을 나타냄

select * from TableA  A 

inner join tableB B ON A.key = b.key

select * from TableA  A 
inner join tableB B ON A.key = b.key

 

2. 왼쪽 조인 (left outer join) : 테이블 B의 일치하는 부분의 레코드와 함께 테이블 A를 기준으로 완전한 레코드 집합을 생성한다. 만약 테이블 B에 일치하는 항목이 없으면 해당 값은 null 값이 된다. 

select * from TableA  A
left join TableB B ON A.key = b.key

 

3. 오른쪽 조인 (right outer join) : 테이블 A에서 일치하는 부분의 레코드와 함께 테이블 B를 기준으로 완전한 레코드 집합을 생성한다. 만약 테이블 A에 일치하는 항목이 없으면 해당 값은 null 값이 된다. 

select * from TableA  A
right join TableB B ON A.key = b.key

 

4. 합집합 조인 (full outer join) = 완전 외부 조인 : 양쪽 테이블에서 일치하는 레코드와  함께 테이블 A와 테이블 B의 모든 레코드 집합을 생성한다. 이때 일치하는 항목이 없으면 누락된 쪽에 null값이 포함되어 출력된다. 

select * from TableA  A
full join TableB B ON A.key = b.key

 

 

 

 

- left join = left outer join 과 같다.

- full outer join 에서 중복될 경우 중복 데이터 모두 출력한다. (중복 데이터 하나만 출력 하는 것 아님)

- full outer join 과 union all 과 다른 점은 ?

full outer join 합집합을 출력하며, 공통 데이터는 하나의 행으로 결합한다. union all은 조인이 아닌 단순 테이블 결과를 합치는 것 이다. 

 

추가 참고 자료

https://gyoogle.dev/blog/computer-science/data-base/Join.html

 

Join | 👨🏻‍💻 Tech Interview

Join 조인이란? 두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법 테이블을 연결하려면, 적어도 하나의 칼럼을 서로 공유하고 있어야 하므로 이를 이용하여 데이터 검

gyoogle.dev

 

 

'CS' 카테고리의 다른 글

varchar와 nvarchar의 차이  (0) 2024.12.04

+ Recent posts