본문 바로가기
DBMS/MySQL

[MySQL] 문자열 타입의 종류와 CHAR, VARCHAR, NVARCHAR 비교

by gf0308 2022. 2. 23.

MySQL의 문자열(String) 타입 종류

MYSQL에서 문자열 데이터 타입은 '고정 문자열' 타입과 '가변 문자열' 타입이 있다

 

#고정 문자열 타입

칼럼의 데이터 크기를 선언해주면(ex: CHAR(10)) 만약 그 크기만큼 데이터가 다 차지 않더라도

해당 크기를 고정적으로 유지함 (남는 부분을 null로 채우고 원래 선언된 크기를 유지함)

-> 즉 해당 공간만큼 다 채우지 않는다면 메모리 낭비가 되며,

    데이터를 가져올 때 공백을 제거해주기 위해 trim() 메서드를 사용하는 작업이 추가됨.

 

  ##고정 문자열인 Data Type

  - CHAR (최대 10byte의 크기를 가질 수 있음)

 

 

#가변 문자열 타입

칼럼의 데이터 크기를 선언해주고 데이터가 채워졌는데 만약 그 크기만큼 데이터가 다 차지 않으면

할당한 데이터만큼만 fit 하게 메모리가 사용됨

-> 즉 크기를 10만큼 선언해줬더라도 실제로 데이터를 6만큼만 채워 넣으면 6만큼만 메모리가 할당되도록 함

(메모리 낭비가 되지 않음)

 

  ## 가변 문자열인 Data Type

  - VARCHAR (최대 10byte의 크기) : 가변 일반 문자열에 적합

  - NVARCHAR  (최대 10byte의 크기) : 가변 유니코드 문자열에 적합

 

 

일반 문자 vs 유니코드 문자 차이 비교  

 - 일반 문자(영어 등)는 1byte가 하나의 문자를 표현
 - 유니코드 문자(한국어, 중국어, 일본어 등) 2byte가 하나의 문자를 표현한다. (일반 문자에 비해 2배의 공간 사용)

  

 


CHAR, VARCHAR, NVARCHAR 타입 비교

#문자열 타입

- CHAR는 고정 문자열 타입
- VARCHAR, NVARCHAR는 가변 문자열 타입

 

#사용할 때
- CHAR는 고정적인 크기의 '일반 문자열(영어 등)'을 사용할 때 사용
- VARCHAR는 가변적인 크기의 '일반 문자열(영어 등)'을 사용해주는 경우일 때 (-> 즉 '가변 일반 문자열'일 경우 적합)
- NVARCHAR는 가변적인 크기의 '유니코드 문자열(한국어, 중국어 등 비영어, 다국어 지원 일 때)' 사용일 때 적합   

 

#CHAR와 VARCHAR 비교

같은 문자열 값을 char와 varchar로 저장하고 두 값을 equal()로 비교한다면 false가 나올 수 있다

왜냐하면 char는 데이터 공간이 남아도 그 공간을 공백으로 채우는데

이렇게 되면 비교할 시 'sample' == 'sample    '처럼 되게 되기 때문에 false가 나올 수 있는 것이다. 

-> 이때 trim()으로 char 쪽의 공백을 제거한 후 비교하면 true가 나올 수 있음
(고정 길이 문자열이 아닌 경우엔 varchar를 쓰는 것이 좋음(대부분 varchar를 씀))

 

#CHAR의 특징

CHAR(n)

- 고정 길이 데이터 타입(최대 255byte 가능)

- 지정된 길이보다 짧은 데이터가 입력되어 들어갈 시 나머지 공간은 공백(NULL)으로 채워짐
- CHAR(0)은 NULL을 의미하며 NULL 혹은 ''(빈 문자열)만을 가질 수 있음

 

 

 

(참조: https://power-overwhelming.tistory.com/38)

 

[DB/mysql] MySQL(MariaDB) 데이터 타입

MySQL (MariaDB) 데이터 타입( Data Type ) 문자형 (String Type) CHAR(n) : 고정길이 데이터 타입 (최대 255byte) - 지정된 길이보다 짧은 데이터 입력시 나머지 공간이 공백(Null)으로 채워짐 CHAR(0) 은 NULL..

power-overwhelming.tistory.com